实验7.1 将一个整数用二进制形式输出 1. 题目: 输入一个无符号整数,将其用二进制形式输出。 2. 实验要求:输入一个无符号整数,使用atod宏将它转换成2进制补码形式并存储在内存中,使用移位操作,将其按从左到右的顺序一位位地移出并显示。 3. 提示:存在多条指令可以实现移位操作,关键是移位之后判断CF的值然后决定显示0或1。
时间: 2024-02-24 14:59:45 浏览: 89
下面是汇编代码实现该程序:
```assembly
.model small
.stack 100h
.data
InputMsg db 'Enter an unsigned integer: $'
OutputMsg db 'Binary representation: $'
Buffer db 32 dup ('$') ; 存储二进制形式的字符串
.code
mov ax, @data
mov ds, ax
; 输出提示信息,读入一个无符号整数
mov ah, 09h
lea dx, InputMsg
int 21h
mov ah, 0ah
lea dx, Buffer
int 21h
; 将输入的整数转换成二进制形式
mov si, offset Buffer + 1 ; 将 SI 指向存储输入数据的字符串
mov cl, [si] ; 读取字符串长度
mov ch, 0 ; 清空 CH 寄存器
inc si ; 将 SI 指向字符串中的数据
mov al, [si] ; 读取一个字符
atod al ; 将字符转换成数字
mov bx, 2 ; 除数为 2
xor dx, dx ; 清空 DX 寄存器
div bx ; 将 AX 除以 BX,商存入 AL,余数存入 DX
mov [si], dl ; 余数存储到字符串中
dec cl ; 字符串长度减 1
cmp cl, 0 ; 检查字符串是否结束
jne loop ; 如果字符串没有结束,则继续循环
cmp al, 0 ; 如果商为 0,表示已经转换完成
jne loop ; 如果商不为 0,则继续循环
mov ah, 0 ; 在字符串前加上 0
mov al, '0'
dec si ; 将 SI 指向字符串的前一个位置
stosb ; 存储 0
jmp display ; 跳转到显示结果的部分
loop:
mov al, [si] ; 读取一个字符
atod al ; 将字符转换成数字
mov bx, 2 ; 除数为 2
xor dx, dx ; 清空 DX 寄存器
div bx ; 将 AX 除以 BX,商存入 AL,余数存入 DX
mov [si], dl ; 余数存储到字符串中
dec cl ; 字符串长度减 1
cmp cl, 0 ; 检查字符串是否结束
jne loop ; 如果字符串没有结束,则继续循环
cmp al, 0 ; 如果商为 0,表示已经转换完成
jne loop ; 如果商不为 0,则继续循环
display:
; 输出二进制形式的字符串
mov ah, 09h
lea dx, OutputMsg
int 21h
mov si, offset Buffer ; 将 SI 指向存储二进制形式的字符串
mov cl, [si] ; 读取字符串长度
inc si ; 将 SI 指向字符串中的第一个字符
display_loop:
mov al, [si] ; 读取一个字符
cmp al, '0' ; 比较字符是否为 0
je display_zero ; 如果是,则输出 0
mov ah, 02h ; 如果不是,则输出 1
mov dl, '1'
int 21h
jmp next_char
display_zero:
mov ah, 02h ; 输出 0
mov dl, '0'
int 21h
next_char:
inc si ; 将 SI 指向下一个字符
dec cl ; 字符串长度减 1
cmp cl, 0 ; 检查字符串是否结束
jne display_loop ; 如果字符串没有结束,则继续循环
mov ah, 4ch ; 退出程序
int 21h
end
```
该程序使用 `atod` 宏将输入的无符号整数转换成二进制形式,并将二进制形式存储在字符串 `Buffer` 中。程序使用 `lea` 指令将 `Buffer` 的地址存储到 `si` 中。程序使用 `mov cl, [si]` 读取字符串长度,并将 `si` 指向字符串中的第一个字符。程序逐个读取字符串中的字符,并将其转换成数字,然后将其除以 2,商存储在 `al` 中,余数存储在 `dx` 中,并将余数存储到字符串中。程序重复这个操作,直到商为 0。然后程序使用 `mov ah, 02h` 输出字符串 "Binary representation: ",并逐个输出字符串 `Buffer` 中的字符,如果字符是 0,则输出 0,如果字符是 1,则输出 1。最后程序退出。
阅读全文