【例4.1】试编写一程序计算以下表达式的值。
w=(v-(x*y+z-540))/x
式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如下图所示。

源程序如下:
DATA SEGMENT
X DW 200
Y DW 100
Z DW 3000
V DW 10000
W DW 2 DUP(?)
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
START: MOV AX,DATA
MOV DS,AX ;DATA→AX
MOV AX,X
IMUL Y ;(X)*(Y)→DX:AX
MOV CX,AX
MOV BX,DX ;(DX:AX)→(BX:CX)
MOV AX,Z
CWD ;(Z)符号扩展
ADD CX,AX
ADC BX,DX ;(BX:CX)+(DX:AX)→(BX:CX)
SUB CX,540
SBB BX,0 ;(BX:CX)-540→(BX:CX)
MOV AX,V
CWD ;(V)符号扩展
SUB AX,CX
SBB DX,BX ;(DX:AX)-(BX:CX)→(DX:AX)
IDIV X ;(DX:AX)/X
MOV W,AX ;商→W
MOV W+2,DX ;余数DX→W+2
MOV AH,4CH
INT 21H
CODE ENDS ;退出DOS 状态
END START
【例4.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
TAB DB 80,85,86,71,79,96
DB 83,56,32,66,78。84
NO DB 10
ENGLIST DB?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
BEGIN: MOV AX,DATA
MOV DS ,AX
LEA BX,TAB
MOV AL,NO
DEL AL
XLAT TAB
MOV ENGLISH,AL
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN


