详细分析每一个代码的含义,;子程序名:Print ;功能:输出数字对应的ascii码 ;入口参数:DX=存储的逆序形式显示的十进制数字 ;出口参数:DL存放的ASCII码 Print: MOV AX,DX MOV BX,DX ;DX用于输出,再启用BX存储数字 SHR CX,8 ;CX为循环次数 LL1@Print: MOV AX,BX AND AX,0X0F CMP AL,0 JB LL2@Print CMP AL,9 JA LL2@Print ADD AL,'0' MOV DL,AL MOV AH,2 INT 21H SHR BX,4 LOOP LL1@Print LL2@Print: MOV AL,0 RET LL3@Print: RET
时间: 2023-04-02 21:00:36 浏览: 68
这段代码是一个子程序,名为Print,用于将存储的逆序形式的十进制数字转换为对应的ASCII码并输出。其中,DX存储的是逆序形式的十进制数字,DL用于存放转换后的ASCII码。代码首先将DX的值赋给AX和BX,然后通过移位操作将高8位存入CX中,用于循环输出每一位数字的ASCII码。在循环中,先将BX的值赋给AX,然后通过AND操作取出低4位数字,判断是否小于等于9,如果是则加上''的ASCII码值,否则需要进行其他操作。最后将转换后的ASCII码存入DL中,并通过INT 21H中断调用输出。最后,代码通过RET指令返回。
相关问题
分析具体代码的含义:;子程序名:Print ;功能:输出数字对应的ascii码 ;入口参数:DX=存储的逆序形式显示的十进制数字 ;出口参数:DL存放的ASCII码 Print: MOV AX,DX MOV BX,DX ;DX用于输出,再启用BX存储数字 SHR CX,8 ;CX为循环次数 LL1@Print: MOV AX,BX AND AX,0X0F CMP AL,0 JB LL2@Print CMP AL,9 JA LL2@Print ADD AL,'0' MOV DL,AL MOV AH,2 INT 21H SHR BX,4 LOOP LL1@Print LL2@Print: MOV AL,0 RET LL3@Print: RET
这段代码是一个子程序,名为Print,其功能是输出数字对应的ASCII码。入口参数为DX,存储的是逆序形式显示的十进制数字。出口参数为DL,存放的是ASCII码。具体实现是将DX的值赋给AX和BX,然后将CX初始化为8,用于循环8次。在循环中,先将BX与xF进行AND运算,得到低4位的值,然后判断是否小于等于9,如果是,则加上字符'',否则跳转到LL2@Print处。然后将DL赋值为AL,调用INT 21H进行输出,再将BX右移4位,循环8次后结束。最后,返回到LL3@Print处。
基于8086用汇编语言编写一个加法程序: 1325十9839,用ASCII码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加结果显示输出
好的,以下是基于8086用汇编语言编写的加法程序,实现了将1325和9839相加的功能,并将结果以ASCII码的形式存储在数据区DATA3中,并将结果显示输出:
```
.model small
.stack 100h
.data
DATA1 db '1325$'
DATA2 db '9839$'
DATA3 db ' $' ; 用于存储结果,需要预留4个字节的空间
.code
mov ax, @data
mov ds, ax
; 将DATA1和DATA2中的ASCII码转换成数值,并相加
mov si, offset DATA1
mov bl, 10 ; 用于将ASCII码转换成数值
xor cx, cx ; 存储结果的寄存器清零
add_loop1:
mov al, byte ptr [si]
cmp al, '$' ; 如果到达字符串结尾则跳出循环
je add_loop2
sub al, 48 ; 将ASCII码转换成数值
mul bl ; 将前面的结果乘以10
add cx, ax ; 加上当前位的数值
inc si ; 处理下一位
jmp add_loop1
add_loop2:
mov si, offset DATA2
xor bl, bl
add_loop3:
mov al, byte ptr [si]
cmp al, '$'
je add_finish
sub al, 48
mul bl
add cx, ax
inc si
jmp add_loop3
add_finish:
; 将结果转换成ASCII码,并存储到DATA3中
mov si, offset DATA3+3 ; 从最低位开始存储结果
xor bl, bl ; 用于存储当前位的数值
mov dx, 10 ; 用于将数值转换成ASCII码
cmp cx, 0 ; 如果结果为0,则直接存储'0'
jne convert_loop
mov byte ptr [si], '0'
jmp print_result
convert_loop:
xor ax, ax ; 存储商的寄存器清零
div dx ; 将结果除以10,得到商和余数
add al, 48 ; 将余数转换成ASCII码
mov byte ptr [si], al ; 存储当前位的ASCII码
dec si ; 处理下一位
cmp cx, 0 ; 如果商为0,则跳出循环
jne convert_loop
print_result:
; 输出结果
mov ah, 9 ; DOS中断21H的子功能9,用于在屏幕上显示字符串
mov dx, offset DATA3 ; 将存储结果的地址放入DX
int 21H
; 退出程序
mov ah, 4ch ; DOS中断21H的子功能4Ch,用于退出程序
xor al, al ; 返回值为0
int 21H
end
```
说明:该程序将字符串'1325'和'9839'存储在DATA1和DATA2中,然后将它们转换成数值相加,并将结果存储在DATA3中。最后,将结果转换成ASCII码,并使用DOS中断21H的子功能9将结果输出到屏幕上。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)