吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 65|回复: 1
收起左侧

[经验求助] 汇编程序中调用功能号09h并中断调用输出时,AL寄存器的值被更改

[复制链接]
YWQ8 发表于 2024-4-16 16:36
25吾爱币
在完成汇编作业的时候,遇到了不能理解的BUG。
在下面的代码中,有几处,用功能号09h,中断调用输出dl的值的时候,al的值被改变了。下面的代码中已经用注释标明出现bug的地方。
我运行的环境是Dosbox 0.74,汇编用的是masm.exe ,链接用的是link.exe 。
如果还需要更多描述,请在下方评论询问。
但是有些代码输出时不会改变al,课本或者网络上也没有找到会更改al的说明,故而求助:为什么al的值会更改?
[Asm] 纯文本查看 复制代码
data segment
    array db  34,10,11,22,21,9,66,88,1,3
    cont  equ $-array
    endd  dw  0
    xx    db  0
    yy    db  0
    zz    db  0
    x1    db  0
    y1    db  0
    tn    db  0
data ends
code segment
           assume cs:code,ds:data
    tt:    
           mov    ax,data
           mov    ds,ax
           lea    bx,array
           mov    cx,cont
           
    lop:   
           cmp    byte PTR[BX],0
           jg     great
           jl     little
           inc    zz
           jmp    next
    great: 
           inc    xx
           jmp    next
    little:
           inc    yy
    next:  
           inc    bx
           loop   lop
;     mov cx,cont
;     loop1:
;            mov    endd,offset array
;            add    endd,cx
;            dec    endd      
;            lea di,array
;     loop2: 
;            cmp di,endd
;            jg  cc
;            mov dl,byte PTR[di]
;            mov x1,dl
;            mov si,di
;            inc si
;            mov dl,byte PTR[si]
;            ;mov y1,dl
;            cmp dl,x1
;            jle flag
;            mov dl,byte PTR[di]
;            mov tn,dl
;            mov dl,byte PTR[si]
;            mov [di],dl
;            mov dl,tn
;            mov [si],dl
;            ;mov tn,dl
;            ;xchg tn,[si]
;            ;xchg tn,[di]
;        flag:
;            inc di 
;            jmp loop2
;     cc:
;            dec cx
;            loop loop1 
           lea    di,array
           mov    cx,cont
           mov    bl,10d
           mov    ax,0
       nextprint:
           mov    ax,0
  

           mov    al,byte PTR[di]
           mov    dl,al
           mov    ah,02h
           int    21h
       print:
           mov    ah,0
           ;cmp    al,10d
           ;jb     flag2
           div    bl
           mov    dl,al
           mov    al,ah
           add    dl,30h    
           mov    ah,02h
           int    21h  ;此处中断调用会更改al的值
           mov    dl,al
           add    dl,30h
           mov    ah,02h
           int    21h  ;此处也会更改
           ;inc    di  
           ;loop   nextprint
           mov    ah,4ch
           int    21h
code ends
end tt

最佳答案

查看完整内容

INT 02H输出字符是会把输出的字符作为返回值存到AL中

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

C774438026 发表于 2024-4-16 16:36
INT 02H输出字符是会把输出的字符作为返回值存到AL中
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-30 11:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表