鱼C论坛

 找回密码
 立即注册
查看: 596|回复: 3

[已解决]本例中or dl ,30h的意图

[复制链接]
发表于 2025-3-28 18:45:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2025-3-28 18:55 编辑
  1.                 or dl,30h
复制代码

         这一句的作用是把 dl 寄存器中的数字变成对应的文本字符以便利用 DOS 的 AH=02 功能在屏幕上进行显示。例如,dl = 00h,or dl , 30h 后,dl = 30h = '0',再例如,dl = 09h,  or dl , 30h 后,dl = 39h = '9' ,这个操作会把数字 0、9 分别变成对应的字符 '0' 和 '9'。
         但是,本例存在一个问题,那就是字符 'R' 的偏移为十进制 12,也就是说,dl 的值是 0ch,超出了十进制数字 9,是个十进制的两位数(12),就不可以直接 or dl , 30h 了,必须对相关的代码进行修改。
  1. assume cs:code,ds:data,es:data
  2. stack segment stack
  3.               db 400h dup(00)
  4. stack ends
  5. data segment
  6. string        db        'THIS IS A STRING'
  7. count = $ - string
  8. data ends
  9. code segment
  10. start:        mov ax,data
  11.               mov ds,ax
  12.               mov es,ax
  13.               mov di,offset string      ; 这里应该用 mov 指令
  14.               mov al,'R'
  15.               mov cx,count
  16.               cld
  17.               repne scasb
  18.               jz found
  19.               mov dl,'N'
  20.               jmp display
  21. found:        dec di
  22.               mov dx,di
  23.               cmp dx,0ah                ; 判定偏移是否小于十进制 10
  24.               jb x01                    ; 是则跳走
  25.               mov ax,dx                 ; 准备除法操作,被除数赋值
  26.               mov cl,0ah                ; 准备除法操作,除数赋值
  27.               div cl                    ; ax 除以 0ah
  28.               mov dx,ax                 ; dl 是商,dh 是余数
  29.               add dl,30h                ; 把商由数字变成对应的字符
  30.               mov ah,02h                ; 调用 DOS 功能进行屏幕显示
  31.               int 21h                   ; 调用 DOS 功能进行屏幕显示
  32.               mov dl,dh                 ; 准备显示余数
  33. x01:          add dl,30h
  34. display:      mov ah,02h
  35.               int 21h
  36.               mov ah,4ch
  37.               int 21h
  38. code ends
  39. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-29 05:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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