8086汇编语言程序设计?
发布网友
发布时间:2022-05-12 17:16
我来回答
共2个回答
热心网友
时间:2023-10-15 11:21
;========================================
QWERT SEGMENT
TOTAL DW 6000 ;金额数, 皆乘10
HHH DW 15 ;以便包容一位小数
LLL DW 12
STAND DW 80
XXX DW 102, 90, 67, 89, 98, 125
QWERT ENDS
;========================================
ZXCVB SEGMENT
ASSUME CS: ZXCVB, DS:QWERT
START:
MOV AX, QWERT
MOV DS, AX
;--------------------------------
MOV SI, 0
MOV CX, 6
L1: MOV AX, XXX[SI]
SUB AX, STAND
JB L2
MUL HHH
JMP L3
L2: NEG AX
MUL LLL
NEG AX
L3: ADD TOTAL, AX
INC SI
INC SI
LOOP L1
;------------------计算完毕,下面是显示
MOV AX, TOTAL
MOV BX, 10
MOV DX, 0
DIV BX ;除以10, 变成真正的金额数
PUSH DX ;保存小数
CALL DISP
MOV AH, 2
MOV DL, '.'
INT 21H
POP DX ;恢复小数
ADD DL, '0'
MOV AH, 2 ;显示小数
INT 21H
EXIT:
MOV AH, 4CH ;结束程序
INT 21H
;----------------------------------
DISP PROC NEAR
MOV BX, 10
MOV CX, 0
DI1:MOV DX, 0
DIV BX
PUSH DX
INC CX
CMP AX, 0
JNZ DI1
MOV AH, 2
DI2:POP DX
ADD DL, '0'
INT 21H
LOOP DI2
RET
DISP ENDP
;----------------------------------
ZXCVB ENDS
END START
;----------------------------------
本程序经过实验,可以满足题目要求。
程序运行的结果是 740.4,和人工计算结果相同。
热心网友
时间:2023-10-15 11:21
DATAS SEGMENT
DATA DW 102,90,67,89,98,125
NUMB1 DW 0
NUMB2 DW 0
NUMB3 DW ?
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DI,DATA ;将数据段首地址赋值给DI
MOV CX,6 ;一周工作6天
LOOP1:
MOV AX,[DI] ;取得一天送快递件数
CMP AX,80 ;检测完成任务情况
JLE LOOP2 ;若AX小于或等于80,则跳转到LOOP2
SUB AX,80 ;计算超额数量
MUL 15 ;计算超额工资
ADD AX,NUMB1 ;累计超额工资
MOV NUMB1,AX ;超额工资不会超过65535,DX不用管
INC DI ;指针加一
LOOP LOOP1 ;循环L00P1,直到CX==0成立
LOOP2:
MOV AX,80
SUB AX,[DI]
MUL 12 ;计算扣除工资
ADD AX,NUMB2 ;累计扣除工资
MOV NUMB2,AX ;超额工资不会超过65535,DX不用管
INC DI ;指针加一
LOOP LOOP1 ;循环L00P1,直到CX==0成立
MOV AX,NUMB1 ;总超额工资
ADD AX,6000 ;加基本工资,保留一位小数
SUB AX,NUMB2 ;减总扣除工资
MOV NUMB3,AX ;存储总工资
MOV AH,4CH ;带返回码结束功能
INT 21H ;返回系统
CODES ENDS
END START