请用8086汇编语言实现:将AX和BX进行加、减、乘或除的运算,每种运算由用户从键盘上选择。程序中设置寄存器的值,或在DEBUG下设定寄存器值并在DEBUG下运行程序。
时间: 2024-02-26 14:56:47 浏览: 132
好的,我会尽力回答您的问题。以下是8086汇编语言实现将AX和BX进行加、减、乘或除的运算的程序:
```assembly
; 8086汇编语言实现将AX和BX进行加、减、乘或除的运算
; 每种运算由用户从键盘上选择
; 数据段
data segment
msg1 db 'Enter operation (+, -, *, /): $'
msg2 db 'Enter value for AX: $'
msg3 db 'Enter value for BX: $'
msg4 db 'Result: $'
op db ?
value1 dw ?
value2 dw ?
result dw ?
data ends
; 代码段
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
; 获取操作符
mov ah, 9
lea dx, msg1
int 21h
mov ah, 1
int 21h
sub al, '0'
mov op, al
; 获取AX的值
mov ah, 9
lea dx, msg2
int 21h
mov ah, 1
int 21h
sub al, '0'
mov bh, 0
mov bl, al
mov ax, 0
mov al, bh
mov value1, ax
mov ah, 1
int 21h
sub al, '0'
mov bh, 0
mov bl, al
mov ax, 0
mov al, bh
add value1, ax
; 获取BX的值
mov ah, 9
lea dx, msg3
int 21h
mov ah, 1
int 21h
sub al, '0'
mov bh, 0
mov bl, al
mov ax, 0
mov al, bh
mov value2, ax
mov ah, 1
int 21h
sub al, '0'
mov bh, 0
mov bl, al
mov ax, 0
mov al, bh
add value2, ax
; 执行所选择的操作
cmp op, '+'
je add_op
cmp op, '-'
je sub_op
cmp op, '*'
je mul_op
cmp op, '/'
je div_op
; 如果操作符无效,输出错误信息
mov ah, 9
lea dx, msg4
int 21h
mov ah, 2
mov dl, 'E'
int 21h
mov ah, 2
mov dl, 'r'
int 21h
mov ah, 2
mov dl, 'r'
int 21h
mov ah, 2
mov dl, 'o'
int 21h
mov ah, 2
mov dl, 'r'
int 21h
; 结束程序
jmp exit_prog
add_op:
mov ax, value1
add ax, value2
mov result, ax
jmp print_result
sub_op:
mov ax, value1
sub ax, value2
mov result, ax
jmp print_result
mul_op:
mov ax, value1
mul value2
mov result, ax
jmp print_result
div_op:
mov ax, value1
xor dx, dx
div value2
mov result, ax
jmp print_result
print_result:
; 输出结果
mov ah, 9
lea dx, msg4
int 21h
mov ah, 2
mov dl, ' '
int 21h
mov ax, result
mov bx, 10
call print_num
; 结束程序
exit_prog:
mov ah, 4ch
int 21h
print_num proc near
push ax
push bx
push cx
push dx
xor cx, cx
cmp ax, 0
jge check_bx
; 处理负数
mov ah, 2
mov dl, '-'
int 21h
neg ax
check_bx:
; 求出数字的位数
mov bx, 10
find_digits:
xor dx, dx
div bx
push dx
inc cx
cmp ax, 0
jne find_digits
; 逐个输出数字
output_digits:
pop dx
add dl, '0'
mov ah, 2
int 21h
loop output_digits
pop dx
pop cx
pop bx
pop ax
ret
print_num endp
code ends
end start
```
您可以在DEBUG下设定AX和BX的值以及操作符,然后在DEBUG下运行程序。
注意:由于本程序使用了DOS中断21h来处理输入和输出,因此只能在DOS环境下运行。
阅读全文