⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一个简单汇编题目的调试排错过程).txt

📁 一个简单汇编题目的调试排错过程).可以帮助初学者改正自己对与汇编的一些认识
💻 TXT
字号:
从键盘输入一系列字符,以回车键结束,编程统计其中非数字字符的个数

.model small
.stack
.data
cnt db ?
buf db 20h dup(?)
.code
start:  mov ax,@data
 mov ds,ax
 lea si,buf
 mov dl,0
next1:  mov ah,01h
 int 21h
 mov [si],al
 inc si
 cmp al,0dh
 jz done
 cmp al,30h
 jge next
 inc dl
 jmp next1
next:   cmp al,39h
 jbe next1
 inc dl
 jmp next1
done:   mov bl,dl;首先把DL里保存的计数放在BL
 mov dl,0dh;0dh(回车)和下面的0ah(换行)是为了下面的输出换行
 mov ah,2
 int 21h
 mov dl,0ah
 mov ah,2
 int 21h
 mov dl,bl;再把BL的数字还原到DL中
 ;add dl,30h;当非数字个数等于或者大于10时,无效
 ;;;;;;;;;;;;;;;;;;;;;;实现十进制输出
 mov ah,00h
 mov dh,00h 
 mov ax,dx
 mov cl,0ah
 div cl
 mov cl,ah;由于除法指令把余数和商分别放在AL,AH,由于AH被mov ah,2占用,所以转移到CL
 mov dl,al
 cmp al,01h;实现当字母个数小于10时,不输出0,如个数为5时,输出05,我实现输出5,首先和01H比较,小于就说明是0,跳转
 jb ss1
 add dl,30h
 mov ah,2
 int 21h
ss1: mov dl,cl
 add dl,30h
 ;;;;;;;;;;;;;;;;;;;;;;
 mov ah,2
 int 21h
 mov cnt,dl
 mov ax,4c00h
 int 21h
 end start 

上面是正确的代码,MASM5.0格式

开始没考虑ah被mov ah,2
                              int 21h占用,个位数的数字总是显示2,后经反复观察,发现除法指令把商和余数保存在了AH,AL,中,但是21号中断的2号子中断占用了AH,恍然,高兴,,,,,,,,




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -