4-11 DATA X DB Y DB Z DB DATA CODE
SEGMENT
4 DUP(?) 4 DUP(?) 4 DUP(?) ENDS SEGMENT
CS:CODE,DS:DATA AX,DATA
;定义X,Y,Z为字节变量
ASSUME
START: MOV
MOV MOV MOV SUB MOV
MOV SBB MOV
DS,AX
DL,0
AX,WORD PTR X AX,WORD PTR Y ;X,Y低16位相减
WORD PTR Z,AX ;结果存入Z的低16位 AX,WORD PTR X[2]
AX,WORD PTR Y[2] ;X,Y高16位相加 WORD PTR Z[2],AX ;结果存入Z的高16位
JNO OK
MOV DL,-1 ;溢出
AH,4CH
INT 21H
OK: MOV
CODE ENDS END START
4-12 (1) DATA
SEGMENT
DB 100 DUP(?)
MESG DB 'ERROR INPUT!$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC FAR PUSH DS
MOV PUSH MOV
AX,0 AX AX,DATA
MOV DS,AX
MOV AH,01H
INT 21H ;从键盘输入一个字符,该字符ASCII码送入AL CMP
AL,41H
JB ERROR CMP AL,4AH JA ERROR
CMP AL,41H
JE P0 ;判断输入字符是为'A',则跳转到P0 ... CMP AL,4AH
JE P9 ;判断输入字符是为'J',则跳转到P9 RET
P0: ... ... P9: ...
RET
ERROR: MOV DX,OFFSET MESG MOV AH,09H INT 21H ;输入字符非'A'~'J'则输出错误信息 RET START ENDP CODE ENDS END START (2) DATA SEGMENT BASE DATA STACK DB STACK
DW P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 ENDS
SEGMENT PARA STACK 'STACK' 100 DUP(?) ENDS
MESG DB 'ERROR INPUT!$'
CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC FAR PUSH DS MOV AX,0
PUSH MOV MOV MOV
AX AX,DATA
DS,AX BX,0 ;BX为跳转表BASE内寻址编号,清零
MOV AH,01H
INT 21H ;从键盘输入字符命令 CMP
AL,41H
JB ERROR CMP AL,4AH
JA ERROR ;输入字符非'A'~'J'则跳转到ERROR MOV BL,AL
SUB BL,41H ;得编号 SHL BX,1 ;表内偏移量=编号*2
JMP BASE[BX];查跳转表跳转到相应的子程序
ERROR: MOV
DX,OFFSET MESG
MOV AH,09H
INT 21H ;输出错误信息
RET P0: ...
RET ...
P9: ... RET START ENDP CODE ENDS END START 4-13 CODE
SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV GOOD,0
MOV PASS,0
MOV BAD,0
XOR BX,BX ;bx存放全年级统计总成绩 XOR SI,SI MOV CX,100 LP: MOV AH,BUF[SI] CMP AH,85H JA CMP JAE
GS
AH,60H PS
MOV AL,BAD ADD AL,1 DAA MOV BAD,AL JMP AGAIN GS: MOV AL,GOOD ADD AL,1 DAA MOV GOOD,AL JMP AGAIN PS: MOV AL,PASS ADD AL,1 DAA MOV PASS,AL
AGAIN: MOV AL,BL ADD AL,AH DAA MOV BL,AL MOV AL,BH ADC AL,0 DAA
MOV BH,AL INC SI LOOP LP
MOV AVRG,BH MOV AH,4CH INT 21H CODE ENDS
END
START
4-15 DATA FIRST
SEGMENT
DB '...$' ;定义字符串
100 ;定义字符串长度 ;定义存放结果单元
COUNT EQU
RESULT DW ? DATA STACK DB STACK
ENDS
SEGMENT PARA STACK 'STACK' 100 DUP(?) ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX MOV BX,OFFSET FIRST ;建立数据指针
MOV MOV
CX,COUNT ;设置循环次数 DX,0 ;清零计数器
LP: CMP BYTE PTR [BX],'A'
JNZ NEXT ;非'A'则转到NEXT INC DX ;是'A'则计数器DX加1 NEXT: INC BX ;调整数据指针
LOOP MOV MOV INT 21H
ENDS
START
END
LP
;循环100次
RESULT,DX ;结果存入RESULT AH,4CH
CODE
4-17

