如何把上述代码改位不限位数的输出
时间: 2024-02-22 12:54:55 浏览: 63
要将该代码改为不限位数的输出,可以将数组num的长度增加到一个较大的值,例如100,这样就可以输出最多100位的数。同时,需要修改循环p和循环p2的终止条件,使其不再限制循环次数。修改后的代码如下:
```
.MODEL SMALL
.DATA
num DB 0,0,0,0,0,0,0,0,0,0, ;定义一个数组num,长度为100
cr DB 0DH,0AH,'$' ;定义回车换行符,用于输出
.STACK DB 128 DUP (?)
.CODE
.STARTUP
mov ax,123456789 ;要转化的数
lea si,num ;把 si 赋值为数组的起始地址
mov bh,0 ;计数器清零
p:
mov bl, 10
div bl ;这个数除以10
push ax ;把 ax 保存起来,防止被破坏
add ah,30h ;把余数转化成字符
mov num[si],ah ;把余数存到num数组
inc si ;地址++
inc bh ;计数器++
pop ax ;取出 ax,并且把 ah 清空
mov ah ,0
cmp ax ,0 ;被除数为0是两者相等,ZF为1
jnz p ;循环,直到ax为0
mov cl,bh ;确定要输出的位数
mov ch,0
lea si,num ;数组地址重新指向头部
p2:
dec si
mov dl,num[si] ;把数组中的每一个数放到dl输出
mov ah,2
int 21h
cmp si,OFFSET num ;判断是否到达数组头部
jne p2
mov ah,9 ;输出回车换行符
lea dx,cr
int 21h
mov ah,4ch ;程序结束
int 21h
END
```
在修改后的代码中,最多可以输出100位的数,但实际上输出的位数是根据输入的数而定的。循环p和循环p2的终止条件都是判断ax是否为0,如果不为0,则继续循环输出。在循环p2中,使用了一个cmp指令判断是否到达数组头部,如果没有到达则继续循环输出。输出完所有数字后,使用dos中断21h的功能9输出回车换行符。
阅读全文