Assembly (Two)

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

代码:

DATA SEGMENT
	NUM DW 102,90,57,89,48,79
	DUO DB 15
	SHAO DB 12
	SALARY DW ?
	STRING  DB  'THE SALARY SHOULD BE : $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:	
	MOV AX,DATA
	MOV DS,AX
	MOV SALARY,8000			; multiply ten to ensure all nums are integers.
	MOV CX,6			; loop six times
	LEA BX,NUM			; address of num
ONE:
	CALL DAY
	INC BX
	INC BX				; index add two
	LOOP ONE
	JMP THREE
DAY:
	MOV AX,60			; the standard nums of items
	MOV DX,[BX]
	CMP DX,AX			; compare with 60
	JC TWO				; if the number is larger than 60
	SUB DX,AX                       ; get the difference
	MOV AL,DL
	IMUL DUO
	MOV DX,SALARY
	ADD DX,AX
	MOV SALARY,DX
	RET
TWO:
	SUB AX,DX			; get the difference
	IMUL SHAO                              
	MOV DX,SALARY
	SUB DX,AX
	MOV SALARY,DX
	RET
THREE:
	LEA  DX,STRING                  ; output the prompt message
     	MOV  AH,9
     	INT  21H
	MOV AX,SALARY
	XOR DX,DX
	MOV BX,10
	DIV BX
	CALL SHOW 			; convert to decimal number
	MOV AH,7
	INT 21H
EXIT:
	MOV AH,4CH	
	INT 21H
SHOW:
	MOV BX,10
	XOR CX,CX
Q0:
	XOR DX,DX
	DIV BX
	OR DX,0E30H
	PUSH DX
	INC CX
	CMP AX,0
	JNZ Q0
Q1:
	POP AX
	INT 10H
	LOOP Q1
	RET
CODE ENDS 
END START

 

Add a Comment

Your email address will not be published. Required fields are marked *