为什么换成BL可以,AL不可以

Liudx-liudx 2018-05-25 08:20:18

data segment
dat db 6ah
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov dl,dat
mov al,dl
mov cl,4
shr dl,cl
add dl,30h
mov ah,02h
int 21h
mov dl,al
and dl,0fh
add dl,37h
int 21h
mov ah,4ch
int 21h
code ends
end start
把字节存储单元上DAT中的两位十六进制数据6AH,显示到屏幕上。其中画线部分用AL为什么出错,换成Bl就可以,书本上是AL,但是运行出来显示的 结果不是6A,而是6=,。图片是我用DUBUG调试的,其中为什么AX=076A变成AX=0774?
...全文
510 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2018-05-25
  • 打赏
  • 举报
回复
怎么影响的,就是它里面使用到了这个寄存器但没有进行保存-恢复的操作。
可能比较简单的或官方的说明里没有提及这个影响,但讨论得稍细致些的或所谓的 undocumented资料里(比如 Ralf Brown's Interrupt List),往往都会提及该功能调用会破坏 AL 里的内容。
Liudx-liudx 2018-05-25
  • 打赏
  • 举报
回复
mov ah,02h int 21h 并没有出口参数,怎么影响AL?谢谢
zara 2018-05-25
  • 打赏
  • 举报
回复
因为中间的 int21h 调用会改写了 AL 里的内容吧;这个,单步时就能发现就会想到的,中断功能说明上也应该有说的。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧