编译生成的EXE点了 还是不能显示字符
时间:2011-05-03
来源:互联网
Assembly code
这个代码用masm for windows 点运行 他自己弹出的命令行 上显示是正确的,但是无论是点生成的exe 还是用命令行执行这个exe,都是只有那句enter any key....要是不加上面那个 pause 函数 根本就是一点就瞬间消失。
但是下面一个代码却正常的 点生成的exe文件 是显示正常的
Assembly code
我想知道 第一个代码为啥生成exe 无法正常显示 请问问题在哪里啊....
assume cs:code,ds:data data segment db 'welcome to masm!, Please any key to end!',0 data ends code segment start: mov ax,data ;将字符串所在的段送入ds mov ds,ax mov cl,2 ;设置字符属性 mov si,0 ;字符串指针,初始化为0,指向第一个字符 call show_str ;调用显示字符串子函数 call pause mov ah,1 ;等待键入一个字符,以结束程序 int 21h mov ax,4c00h ;结束程序 int 21h pause proc near ;子程序定义(起退出缓冲作用) jmp short exitbegin exitstr db 0ah,0dh,'Press any key to exit...$' exitbegin: push ax push ds push dx ;以上3条push指令的作用是保存现场 mov ax,seg pause ;取子程序名pause所在的段地址 mov ds,ax lea dx,exitstr mov ah,9 ;显示字符串exitstr的内容 int 21h mov ah,7 ;等待输入一个[无回显]字符 int 21h pop dx pop ds pop ax ;以上3条pop指令的作用是恢复现场 ret pause endp ;子程序定义结束 show_str: mov ax,0b800h ;将视频缓区的段址送入ES mov es,ax mov bx,10*160+25*2 ;行号*160+列号*2 = 在视频缓区中的偏移量 ;在此处,我选择在第10行,第5列开始显示 mov al,cl ;将属性保存到AL mov cl,0 ;CL未用到,但需要置0 s: mov ch,ds:[si] ;将字符存放到CH jcxz ok ;如果字符值cx = 0,说明字符串结束 mov es:[bx],ch ;将字符存放到屏幕缓冲区 mov es:[bx+1],al ;将属性传到屏幕缓冲区 add bx,2 ;移到下一个显示单元 inc si ;字符指针si+1 jmp short s ;继续显示下一个字符 ok: ret code ends end start
这个代码用masm for windows 点运行 他自己弹出的命令行 上显示是正确的,但是无论是点生成的exe 还是用命令行执行这个exe,都是只有那句enter any key....要是不加上面那个 pause 函数 根本就是一点就瞬间消失。
但是下面一个代码却正常的 点生成的exe文件 是显示正常的
Assembly code
SSEG SEGMENT PARA STACK 'stack' SSEG ENDS DSEG SEGMENT message db 'Hello,world!',13,10,'$' DSEG ENDS CSEG SEGMENT assume cs:CSEG , ds:DSEG, es:DSEG, ss:SSEG MAIN PROC call INIT mov dx, seg message mov ds,dx mov dx,offset message mov ah,9 int 21h call pause ;返回dos之前暂停一下 mov ax, 4c00h ;返回dos int 21h MAIN ENDP INIT PROC ;初始化程序 mov ax ,dseg mov ds , ax mov es , ax ret INIT ENDP pause proc near ;子程序定义(起退出缓冲作用) jmp short exitbegin exitstr db 0ah,0dh,'Press any key to exit...$' exitbegin: push ax push ds push dx ;以上3条push指令的作用是保存现场 mov ax,seg pause ;取子程序名pause所在的段地址 mov ds,ax lea dx,exitstr mov ah,9 ;显示字符串exitstr的内容 int 21h mov ah,7 ;等待输入一个[无回显]字符 int 21h pop dx pop ds pop ax ;以上3条pop指令的作用是恢复现场 ret pause endp ;子程序定义结束 CSEG ENDS END MAIN
我想知道 第一个代码为啥生成exe 无法正常显示 请问问题在哪里啊....
作者: yao90928 发布时间: 2011-05-03
我就是想懂 怎么样才能让他生成的exe文件正常显示,我不想老是用masm for windows的运行结果来验证我写的代码对不对 就是想直接看看生成的exe
作者: yao90928 发布时间: 2011-05-03
第二个代码是不是自己的写的。。。刚学王爽的汇编 了解的不多。。
很纳闷 第二个代码的生成的exe 能正常显示
很纳闷 第二个代码的生成的exe 能正常显示
作者: yao90928 发布时间: 2011-05-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28