使用汇编语言编程:商品数组product中按照商品ID(0-9之间)保存的每样商品对应的价格(假设价格为整数),从键盘输入需要购买的一组商品的ID(假设一次性购买商品不超过10件),计算需要购买商品的总价,并显示出来。 要求如下: (1)接收从键盘输入的商品ID,并依次存放于cart数组中。(此功能由input子程序实现,以“回车”符结束。) (2)根据cart中的商品ID,查找product数组中每件商品的单价,并计算总价。(此功能由checkout子程序实现) (3)将总价转换为10进制数从屏幕上显示出来。(此功能由output子程序实现)
时间: 2024-01-18 08:05:08 浏览: 93
微机原理编程排序
好的,下面是实现这个程序的汇编语言代码:
```
section .data
product dd 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 ; 商品价格数组
cart db 10 ; 存储从键盘输入的商品ID
total resd 1 ; 存储计算得到的总价
section .text
global _start
_start:
; 调用input子程序
call input
; 调用checkout子程序
call checkout
; 调用output子程序
call output
; 退出程序
mov eax, 1
xor ebx, ebx
int 80h
input:
; 从键盘输入商品ID,存储在cart数组中
mov eax, 3
mov ebx, 0
mov ecx, cart
mov edx, 10
int 80h
; 查找回车符,替换为null字符
mov eax, ecx
mov ebx, 0
mov ecx, 10
repne scasb
mov byte [eax-1], 0
ret
checkout:
; 根据cart中的商品ID查找product数组中每件商品的单价,并计算总价
mov ebx, 0 ; 初始化总价为0
mov esi, cart ; esi指向cart数组的首地址
mov edi, product ; edi指向product数组的首地址
; 遍历cart数组,对于每个商品ID,计算其对应的价格并累加到总价中
.loop:
movzx eax, byte [esi] ; 获取商品ID
cmp eax, 10 ; 判断是否为回车符
je .done
imul eax, 4 ; 计算在product数组中的偏移量
add ebx, [edi+eax] ; 累加商品价格
inc esi ; cart数组指针+1
jmp .loop
.done:
mov [total], ebx ; 保存计算得到的总价
ret
output:
; 将total变量中的值以十进制的形式输出到屏幕上
mov eax, 4
mov ebx, 1
mov ecx, [total]
mov edx, 4
int 80h
ret
```
这个程序使用了三个子程序实现不同的功能:
1. input子程序用于从键盘接收输入的商品ID,存储在cart数组中。
2. checkout子程序根据cart中的商品ID查找product数组中每件商品的单价,并计算总价。
3. output子程序将总价以十进制的形式输出到屏幕上。
可以通过调用这三个子程序实现整个程序的功能。
阅读全文