8086汇编语言程序设计?

某学生利用暑期到快递公司打工,该公司以底薪加计件工资的形式,并以周为结算周期给实习学生发工资。具体计薪办法是:实习学生一周工作6天,每周基本工资600元,每天送快递80件为基本要求,每天多送1件增加1.5元,每天不足80件则每少1件扣1.2元。某同学某周内各天的快递量分别为102,90,67,89,98,125。编程计算该实习学生本周能领到多少工资?

;========================================
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,和人工计算结果相同。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-28
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本回答被网友采纳
相似回答