汇编实现定义长度是8位的无符号变量X,Y,Z,计算W=(X+Y)×Z请从键盘接收X,Y,Z,以十进制形式输入,输出结果也用十 进制表示。8位二进制数的表示范围是0-255。
时间: 2023-06-11 09:09:10 浏览: 229
以下是汇编代码实现:
```
.model small
.stack 100h
.data
X db ?
Y db ?
Z db ?
W dw ?
.code
main proc
mov ax, @data
mov ds, ax
; 从键盘接收X,Y,Z
mov ah, 01h ; 从键盘读入一个字符
int 21h ; 调用 DOS 的中断 21h
sub al, 30h ; 将字符转换为数字
mov X, al ; 将数字存入 X
mov ah, 01h ; 从键盘读入一个字符
int 21h ; 调用 DOS 的中断 21h
sub al, 30h ; 将字符转换为数字
mov Y, al ; 将数字存入 Y
mov ah, 01h ; 从键盘读入一个字符
int 21h ; 调用 DOS 的中断 21h
sub al, 30h ; 将字符转换为数字
mov Z, al ; 将数字存入 Z
; 计算 W=(X Y)×Z
mov al, X ; 将 X 存入 AL
mul Y ; 乘以 Y
mov bl, Z ; 将 Z 存入 BL
mul bl ; 乘以 Z
mov W, ax ; 将结果存入 W
; 输出结果
mov ah, 09h ; DOS 的中断 21h 功能,显示字符串
mov dx, offset msg1
int 21h ; 显示 "W="
mov ax, W ; 将 W 存入 AX
call print_num ; 调用打印数字的子程序
mov ah, 4ch ; DOS 的中断 21h 功能,程序结束
int 21h
print_num proc
push ax ; 保存 AX
push bx ; 保存 BX
push cx ; 保存 CX
push dx ; 保存 DX
mov bx, 10 ; BX=10
xor cx, cx ; CX=0
.while ax != 0 ; 当 AX 不为 0 时循环
xor dx, dx ; DX=0
div bx ; DX:AX / BX = AX 余 DX
push dx ; 将余数压入栈中
inc cx ; CX++
.endw
.while cx != 0 ; 当 CX 不为 0 时循环
pop dx ; 从栈中弹出余数
add dl, 30h ; 将余数转换为字符
mov ah, 02h ; DOS 的中断 21h 功能,显示字符
int 21h
dec cx ; CX--
.endw
pop dx ; 恢复寄存器的值
pop cx
pop bx
pop ax
ret ; 返回
print_num endp
msg1 db "W=", 0
end main
```
这段代码将从键盘接收 X、Y、Z,计算 W=(X Y)×Z,并将结果以十进制形式输出。
阅读全文