微型计算机原理及应用技术-第二版(朱金钧版). 联系客服

发布时间 : 星期三 文章微型计算机原理及应用技术-第二版(朱金钧版).更新完毕开始阅读

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 ;源程序结束