MOV [M3],AX ENDM
(2) 设8位寄存器存储的是无符号数,最高位是百位。宏定义的代码段如下:
ADDM MACRO Y ;形式参数Y代表一个8位寄存器
MOV AL,Y XOR AH,AH MOV DL,100 DIV DL
ADD AL,30H MOV DL,AL
MOV AL,AH ;存余数 MOV AH,2 INT 21H ;显示百位数 XOR AH,AH MOV DL,10 DIV DL
ADD AL,30H MOV DL,AL
MOV AL,AH ;存余数 MOV AH,2 INT 21H ;显示十位数 ADD AL,30H MOV DL,AL MOV AH,2
INT 21H ;显示个位数 ENDM
7. 对下面程序进行注释,并说明其功能。
DATA SEGMENT A DB ‘123ABC’ DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX LEA BX,A MOV CX,6 MOV AH,2 LP: MOV AL,[BX]
XCHG AL,DL INC BX INT 21H LOOP LP MOV AH,4CH INT 21H CODE ENDS
END START
【解】注释如下:
DATA SEGMENT ;数据段开始 A DB ‘123ABC’ DATA ENDS ;数据段结束 CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX ;装填数据段 LEA BX,A ;传送变量的地址 MOV CX,6 MOV AH,2 LP: MOV AL,[BX]
XCHG AL,DL INC BX
INT 21H ;系统功能调用,功能号:2 ,
;将字符1、2、3、“A”、“B”、“C”送屏幕显示
LOOP LP ;CX=6,循环6次 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;代码段结束
END START ;源程序结束
程序的功能:显示从A开始的6个字节单元中的字符。 8. 编程将CX、DX作为双字联合右移四位(设CX为高16位),最高4位送入全1。
【解】程序代码如下:
CODE SEGMENT ;代码段开始
ASSUME CS:CODE START: MOV AX,CX
MOV CX,4
LP: SHR AX,1
RCR DX,1 LOOP LP
OR AX,0F000H MOV CX,AX MOV AH,4CH
INT 21H ;返回DOS CODE ENDS ;代码段结束
END START ;源程序结束
9. 编程把从A单元开始存放的3个单字节无符号数按递增顺序排序后存回原处。 【解】程序代码如下:
DATA SEGMENT ;数据段开始 A DB 3 DUP(?) DATA ENDS ;数据段结束 CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX ;装填数据段 LEA BX,A ;传送变量的地址 MOV AL,[BX] CMP AL,[BX+1]
JAE EX1 ;[BX]>[BX+1],交换 CMP2: CMP AL,[BX+2]
JAE EX2 ;[BX]>[BX+2],交换 JMP CONT1 EX1: XCHG AL,[BX+1]
XCHG AL,[BX] MOV AL,[BX] JMP CMP2 EX2: XCHG AL,[BX+2]
XCHG AL,[BX] MOV AL,[BX] CONT1: MOV AL,[BX+1]
CMP AL,[BX+2] JB CONT2
XCHG AL,[BX+2] ;[BX+1]>[BX+2],交换 XCHG AL,[BX+1] CONT2: MOV AH,4CH
INT 21H ;返回DOS CODE ENDS ;代码段结束
END START ;源程序结束
10. 试编写一段程序比较从ARRAY开始存放的3个16位有符号数。根据比较结果置FLAG标志。
(1) 如果3个数都不相等,置FLAG为0。
(2) 如果3个数中有2个数相等,置FLAG为1。 (3) 如果3个数都相等,置FLAG为2。 【解】程序代码如下:
DATA SEGMENT ;数据段开始 ARRAY DW 3 DUP(?) FLAG DB ? DATA ENDS ;数据段结束 CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX ;装填数据段 LEA BX,ARRAY ;传送变量的地址 MOV AX,[BX] CMP AX,[BX+2]
JE EQU1 ; [BX]=[BX+2],执行MOV DL,1 MOV DL,0 JMP CONT1 EQU1: MOV DL,1
CONT1: CMP AX,[BX+4]
JE EQU2 ; [BX]=[BX+4] ,DL+1 JMP CONT2 EQU2: ADD DL,1 CONT2: MOV AX,[BX+2]
CMP AX,[BX+4] JE EQU3 JMP CONT3 EQU3: ADD DL,1 CONT3: CMP DL,3
JNZ EQU4 ; [BX]=[BX+2]=[BX+4] ,DL-1 SUB DL,1
EQU4: MOV FLAG,DL
MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;代码段结束
END START ;源程序结束
相关推荐: