汇编(1)接收从键盘输入的商品ID,并依次存放于cart数组中。(此功能由input子程序实现,以“回车”符结束。) (2)根据cart中的商品ID,查找product数组中每件商品的单价,并计算总价。(此功能由checkout子程序实现) (3)将总价转换为10进制数从屏幕上显示出来。(此功能由output子程序实现)
时间: 2024-01-17 18:03:42 浏览: 123
汇编实验(1)从键盘上接收三个一位十进制数,选出其中最小值显示出来。; (2) 已知当前数据段中 DATA1 和 DATA2 开始分别存放若干字节数据, 数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示 1,否则显示 0;
5星 · 资源好评率100%
好的,这是一个汇编语言的问题。我会尽力回答。首先,我们需要定义两个数组:cart和product。cart用于存放从键盘输入的商品ID,product用于存放每件商品的单价。在程序开始时,需要初始化这两个数组。下面是一个示例程序:
```
.MODEL SMALL
.STACK 100H
.DATA
cart DB 10 DUP(0) ;定义cart数组
product DB 5, 10, 15, 20, 25 ;定义product数组,每件商品的单价分别为5,10,15,20,25
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX ;初始化DS寄存器
CALL INPUT ;调用input子程序
CALL CHECKOUT ;调用checkout子程序
CALL OUTPUT ;调用output子程序
MOV AH, 4CH ;退出程序
INT 21H
INPUT PROC
MOV SI, OFFSET cart ;将SI寄存器指向cart数组
MOV CX, 10 ;需要输入10个商品ID
INPUT_LOOP:
MOV AH, 01H ;调用BIOS中断21H,等待用户输入
INT 21H
CMP AL, 0DH ;检查是否输入了回车符
JE INPUT_DONE
MOV [SI], AL ;将输入的ASCII码存储在cart数组中
INC SI
LOOP INPUT_LOOP
INPUT_DONE:
RET
CHECKOUT PROC
MOV AX, 0 ;将AX寄存器清零,用于累加总价
MOV SI, OFFSET cart ;将SI寄存器指向cart数组
CHECKOUT_LOOP:
MOV DL, [SI] ;将cart数组中的商品ID存储在DL寄存器中
SUB DL, 30H ;将ASCII码转换为数字
MOV AL, [product + DL] ;将对应商品的单价存储在AL寄存器中
ADD AX, AX ;将单价累加到AX寄存器中
INC SI
LOOP CHECKOUT_LOOP
RET
OUTPUT PROC
MOV BX, 10 ;设置除数为10
MOV CX, 0 ;将CX寄存器清零,用于存储输出结果
MOV DX, 0 ;将DX寄存器清零,用于存储余数
OUTPUT_LOOP:
XOR DX, DX ;将DX寄存器清零
DIV BX ;将AX寄存器中的值除以10,商存储在AL寄存器中,余数存储在DX寄存器中
ADD DL, 30H ;将余数转换为ASCII码
MOV [RESULT + CX], DL ;将余数存储在RESULT数组中
INC CX
CMP AX, 0 ;判断商是否为0
JNE OUTPUT_LOOP
DEC CX ;调整CX寄存器的值,使其指向最后一个输出字符
MOV AH, 09H ;调用BIOS中断21H,输出字符串
MOV DX, OFFSET RESULT
INT 21H
RET
RESULT DB 10 DUP(0) ;定义RESULT数组,用于存储输出结果
MAIN ENDP
END MAIN
```
上面的程序实现了题目中要求的三个功能:input、checkout和output。其中input子程序用于从键盘输入商品ID并存储在cart数组中,checkout子程序用于根据cart数组中的商品ID查找对应商品的单价并计算总价,output子程序用于将总价转换为10进制数并在屏幕上显示出来。
阅读全文