任务需求:从键盘输入一个算数表达式,参与计算的数据为十进制整数,运算符包括“+”,“-”,“*”,“/”,不包括括号等其他运算符,计算当前算数表达式的值,并显示到屏幕上。汇编语言写,emu8086
时间: 2025-01-20 17:10:12 浏览: 33
好的,下面是一个使用汇编语言在emu8086环境下编写的程序,该程序可以从键盘输入一个包含加减乘除运算符的算术表达式,并计算其结果并显示在屏幕上。
```assembly
.model small
.stack 100h
.data
buffer db 100
input db 100 dup(?)
result dw 0
msg1 db 'Enter an expression: $'
msg2 db 'Result: $'
.code
main proc
mov ax, @data
mov ds, ax
; 显示提示信息
lea dx, msg1
mov ah, 09h
int 21h
; 读取输入
lea dx, buffer
mov ah, 0Ah
int 21h
; 解析输入并计算结果
lea si, input
call parse_and_calculate
; 显示结果
lea dx, msg2
mov ah, 09h
int 21h
; 显示结果值
mov ax, result
call display_number
; 退出程序
mov ah, 4Ch
int 21h
main endp
parse_and_calculate proc
; 初始化结果
mov result, 0
; 读取第一个数
call read_number
mov bx, ax
; 循环读取运算符和操作数
parse_loop:
; 读取运算符
lodsb
cmp al, '+'
je add_op
cmp al, '-'
je sub_op
cmp al, '*'
je mul_op
cmp al, '/'
je div_op
jmp end_parse
add_op:
call read_number
add bx, ax
jmp parse_loop
sub_op:
call read_number
sub bx, ax
jmp parse_loop
mul_op:
call read_number
imul bx, ax
mov bx, ax
jmp parse_loop
div_op:
call read_number
cwd
idiv bx
mov bx, ax
jmp parse_loop
end_parse:
mov result, bx
ret
read_number proc
; 读取一个十进制数
mov ax, 0
read_loop:
lodsb
cmp al, '0'
jb end_read
cmp al, '9'
ja end_read
sub al, '0'
mov cx, 10
mul cx
add ax, ax
add al, [si-1]
sub al, '0'
adc ah, 0
jmp read_loop
end_read:
ret
read_number endp
display_number proc
; 显示一个十进制数
push ax
push bx
push cx
push dx
mov bx, 10
xor cx, cx
cmp ax, 0
jge display_loop
neg ax
mov dl, '-'
mov ah, 02h
int 21h
display_loop:
xor dx, dx
div bx
push dx
inc cx
cmp ax, 0
jne display_loop
display_digit:
pop dx
add dl, '0'
mov ah, 02h
int 21h
loop display_digit
pop dx
pop cx
pop bx
pop ax
ret
display_number endp
end main
```
阅读全文
相关推荐
















