作业帮 > 综合 > 作业

请问一个汇编程序,功能是把16位2进制数用4位16进制表示出来~

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/23 00:42:14
请问一个汇编程序,功能是把16位2进制数用4位16进制表示出来~
如题:程序如下:
prognam segment ;定义代码段prognam
main proc far ;把程序段分成若干个过程使程序的结构更清晰
assume cs:prognam ;连接cs与prognam段
start:;程序开始
push ds ;为了保护现场,程序在返回的时候就会恢复现场
sub ax,ax
push ax ;且DOS返回的时候偏移地址为0
mov ch,4 ;用ch存放循环计数值
mov bx,13BAh ;给一个值bx,以待验证
rotate:;循环标号
mov cl,4 ;cl存放的是循环左移的次数
rol bx,cl ;让bx循环左移4位,即让最高的4位变成最低的4位
mov al,bl ;取bx的低8位到al进行操作
and al,0fh ;只取al的低4位
add al,30h ;让al+30h变成一个字符
cmp al,3ah ;这里通过判断得知这个16进制位是数字还是字符
jl printit ;是数字的话就跳转到printit进行输出
add al,7h ;如果不是数字的话,还要将al+7h变成一个字符
printit:;输出标号
mov dl,al ;把要输出的内容存放到dl中
mov ah,2 ;DOS功能号2:显示一个字符
int 21h ;DOS调用类型21h
dec ch ;ch自减1
jnz rotate ;如果ch不为0的话,跳转到rotate继续循环
Ret ;返回DOS
main endp
prognam ends ;代码段结束
end start ;程序结束
我想问下为什么在debug中执行的话,运行到显示字符的时候,即调用DOS功能号2的时候,程序就不知道执行到哪里去了,只有在cmd直接加载这个程序的时候才可以得到正确结果~请问这是为什么呢,怎样才可以使这个程序在debug下加载运行呢?
请问一个汇编程序,功能是把16位2进制数用4位16进制表示出来~
你是使用t命令执行的吧?
t命令是单步执行,但是int 21h很显然是个中断,所以它会跟踪到中断处理程序内部.
如果想一下子执行完中断处理程序,当要执行int 21h的时候改用p命令就可以啦