在emu8086中无法正确显示变量数值的问题求助
在emu8086中变量数值显示问题求助
在emu8086里遇到变量数据显示异常:
- 用
int 21h的ah=09h调用能正常显示字符串,代码如下:
.model small .data v db 13, 'how are you doing','$' .code main proc mov dx,OFFSET v mov ah,09h int 21h end main main endp
但尝试显示变量中存储的数值5时,输出错误,寄存器读取值为CD,使用的代码如下:
.model small .data v db 5 .code main proc mov dl,v mov ah,2 int 21h end main main endp
补充说明:问题截图显示寄存器读取值异常。
问题原因与解决办法
ASCII码混淆
int 21h的ah=02h功能是输出ASCII字符,不是直接显示十进制数字。变量里存的5是十进制数值(十六进制05h),对应ASCII字符是不可见控制符;而数字'5'的ASCII码是35h,必须把数值转换成对应ASCII码才能正确显示。数据段未初始化+程序未正常退出
8086汇编必须初始化ds寄存器指向数据段,否则会读取到错误内存值(比如你看到的CD);另外代码缺少程序退出调用ah=4Ch的int 21h,导致执行到后续垃圾指令,引发异常。修正后的代码
.model small .data v db 5 .code main proc mov ax, @data mov ds, ax ; 初始化数据段寄存器 mov al, v add al, 30h ; 把0-9的数值转为对应ASCII字符 mov dl, al mov ah, 02h int 21h mov ah, 4Ch ; 程序正常退出 int 21h end main main endp
内容的提问来源于stack exchange,提问作者Mitul
相关产品推荐
相关产品推荐

