微机原理与接口技术(第二版)清华大学出版社 下载本文

内容发布更新时间 : 2024/12/23 21:51:50星期一 下面是文章的全部内容请认真阅读。

;求补 LEA SI,FIRST LEA DI,FORTH

MOV AX,WORD PTR [SI] ;AX=5F90H 为低十六位数据 INC SI INC SI

MOV DX,WORD PTR [SI] ; DX=696EH 为高十六位数据 XOR AX, 0FFFFH ;将低十六位取反 XOR DX, OFFFFH ;将高十六位按位取反 CLC

ADD AX,01H ;低位加1,即可为原数的求补 ADC DX,0 ;高位加低位加法时的进位 MOV WORD PTR [DI] , AX MOV WORD PTR [DI+2] ,DX MOV AH,4CH INT 21H

CODE ENDS

END START

5. 试编程序将内存从40000H到4BFFFH的每个单元中均写入55H,并再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置7EH; 只要有错,则将AL置81H。 答:

DATA SEGMENT DA1 DB 55H CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,4000H MOV DS,AX MOV CX,0C000H MOV BX,0000H

MOV AH,55H NEXT1: MOV byte ptr[BX],AH INC BX LOOP NEXT1

MOV BX,0000H MOV CX,0C000H MOV AL,81H NEXT2: MOV AH, [BX] CMP AH,55H JNZ EXIT INC BX LOOP NEXT2 MOV AL,7EH EXIT: MOV AH,4CH INT 21H CODE ENDS END START

6. 在当前数据段4000H开始的128个单元中存放一组数据,试编程序将它们顺序搬移到A000H开始的顺序128个单元中,并将两个数据块逐个单元进行比较; 若有错将BL置00H; 全对则将BL置FFH,试编程序。 答:

DATA SEGMENT ORG 400H

DA1 DB 128 DUP(?) ORG 0A00H DA2 DB 128 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

LEA SI,DA1 LEA DI,DA2 MOV CX,128 AGAIN: MOV AL,[SI] INC SI INC DI LOOP AGAIN LEA SI, DA1 LEA DI, DA2 MOV CX,128 NEXT: MOV AL,[SI] MOV BL,[DI] CMP AL,BL JNZ ERROR INC SI INC DI MOV BL,0FFH LOOP NEXT JMP EXIT ERROR: MOV BL,00H EXIT: MOV AH,4CH INT 21H CODE ENDS END START

7. 设变量单元A、B、C存放有3个数,若3个数都不为零,则求3个数的和,存放在D中; 若有一个为零,则将其余两个也清零,试编写程序。 答:

DATA SEGMENT A DB ? B DB ?

C DB ? DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX CMP A,00H JNZ LP1 MOV B,0 MOV C,0 JMP LP4 LP1: CMP B,00H JNZ LP2 MOV A,0 MOV C,0 JMP LP4 LP2: CMP C,00H JNZ LP3 MOV A,0 MOV B,0 JMP LP4 LP3: MOV AL,A ADD AL,B ADD AL,C MOV AH,4CH LP4: INT 21H CODE ENDS END START

8. 有一个100个字节的数据表,表内元素已按从大到小的顺序排列好,现给定一元素,试编程序在表内查找,若表内已有此元素,则结束; 否则,按顺序将此元素插入表中适当的位置,并修改表长。

答:

DATA SEGMENT

BUFF DB 100 DUP(?) DA1 DB (?) LENGTH DB 0 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,0 MOV AL,DA1 MOV CX,100 FIND0: CMP BUFF[SI],AL JZ EXIT INC SI LOOP FIND0 MOV DI,99 MOV SI,0

COMPARE: CMP BUFF[DI],AL JG INSERT MOV BL,BUFF[DI] MOV BUFF[DI+1],BL DEC DI CMP DI,SI JNL COMPARE JMP EXIT INSERT: MOV BUFF[DI+1],AL

EXIT:

MOV LENGTH , 101 MOV AH,4CH INT 21H