用汇编编程,使用MASM汇编器:商品数组product中按照商品ID(0-9之间)保存的每样商品对应的价格(假设价格为整数),从键盘输入需要购买的一组商品的ID(假设一次性购买商品不超过10件),计算需要购买商品的总价,并显示出来。 要求如下: (1)接收从键盘输入的商品ID,并依次存放于cart数组中。(此功能由input子程序实现,以“回车”符结束。) (2)根据cart中的商品ID,查找product数组中每件商品的单价,并计算总价。(此功能由checkout子程序实现) (3)将总价转换为10进制数从屏幕上显示出来。(此功能由output子程序实现)
时间: 2023-12-22 11:06:07 浏览: 89
好的,这是一个使用MASM汇编器编写的程序,实现从键盘输入商品ID,计算购买商品的总价并输出的功能。
```
.model small
.stack 100h
.data
product db 10,20,30,40,50,60,70,80,90,100 ; 商品单价数组
cart db 10 dup(?) ; 购物车数组,最多存放10件商品
total dw 0 ; 总价
prompt1 db 'Please input the product ID (0-9) you want to buy (max 10 items): $'
prompt2 db 'The total price is: $'
newline db 0ah, 0dh, '$'
.code
main proc
mov ax, @data
mov ds, ax
; 调用input子程序输入商品ID
call input
; 调用checkout子程序计算总价
call checkout
; 调用output子程序输出总价
call output
mov ah, 4ch
int 21h
main endp
; 从键盘输入商品ID,并依次存放于cart数组中
input proc
mov si, offset cart ; si指向cart数组的起始地址
mov cx, 10 ; 最多输入10件商品
input_loop:
; 显示提示信息
mov ah, 09h
lea dx, prompt1
int 21h
; 从键盘读取一个字符
mov ah, 01h
int 21h
; 如果是回车符,则结束输入
cmp al, 0dh
je input_done
; 如果不是数字,则忽略
cmp al, '0'
jb input_loop
cmp al, '9'
ja input_loop
; 将商品ID存入cart数组中
sub al, '0'
mov [si], al
inc si
loop input_loop
input_done:
ret
input endp
; 根据cart中的商品ID,查找product数组中每件商品的单价,并计算总价
checkout proc
mov si, offset cart ; si指向cart数组的起始地址
mov cx, 10 ; 最多有10件商品
checkout_loop:
; 如果已经没有商品了,则结束循环
cmp byte ptr [si], 0
je checkout_done
; 根据商品ID查找商品单价
mov al, [si]
mov bl, al
cmp al, 0
jb checkout_next
cmp al, 9
ja checkout_next
mov al, byte ptr product[al]
add word ptr total, ax
checkout_next:
inc si
loop checkout_loop
checkout_done:
ret
checkout endp
; 将总价转换为10进制数从屏幕上显示出来
output proc
; 显示提示信息
mov ah, 09h
lea dx, prompt2
int 21h
; 将总价转换为10进制数
mov ax, total
mov bx, 10
xor cx, cx
convert_loop:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz convert_loop
; 依次从栈中弹出数字并显示
mov ah, 02h
output_loop:
pop dx
add dl, '0'
int 21h
; 如果还有数字,则继续循环
loop output_loop
; 显示换行符
lea dx, newline
int 21h
ret
output endp
end main
```
这是一个简单的程序,实现了输入商品ID、计算总价、输出总价的功能。您可以在MASM汇编器中编译并运行它。
阅读全文