计算机组成原理与汇编语言程序设计课后习题及解答(详解) 下载本文

VAR2 DB ? , ? ADR DW VAR1,VAR2

DATA ENDS

若要使ADR+2 字单元的内容为0022H, 上述空白处应填写什么语句? 解:上述空白处应填写 ORG 0020H

17.现有下列程序段:

MOV SI , OFFSET SOUR MOV DI , OFFSET DEST

MOV CX , 20H CLD

REP MOVSW

如果上述程序段不使用串操作指令(即取消REP MOVSW指令), 试修改程序段,完成原程序段功能. 解:

MOV SI , OFFSET SOUR

MOV DI , OFFSET DEST MOV CX , 20H LOP:MOV AX , [SI] MOV [DI] , AL INC SI INC SI INC DI INC DI

LOOP LOP

18. 下面是两个字符串的比较程序,比较结果存放在RESULT单元中.试问: (1) 程序运行后,结果单元(RESULT)存放的内容表示什么意义? (2) 如SJ1的字符串为?captial‘,SJ2的字符串为?captive‘时,(RESULT)=?

……

SJ1 DB ?…………‘ SJ2 DB ?…………‘ RESULT DB 0 ……

LEA BX , SJ1 LEA DI , SJ2 CLD LOP: MOV AL , [BX] SCASB JNE EXIT INC BX JMP LOP EXIT: SUB BX,OFFSET SJ1

MOV RESULT , BL

答:(1) (RESULT)存放的内容表示SJ1字串中第一个不同于SJ2字串的对应字符的偏移量(相对于SJ1).

(2) (RESULT) = 5

19. 仔细阅读下面程序,试给出程序运行结束后BUF2各字节存储单元的内容。 DATA SEGMENT

BUF1 DW 0102H,0304H,0708H COUNT EQU $ - BUF1

BUF2 DW 5 DUP(0) DATA ENDS COSEG SEGMENT

ASSUME CS:COSEG, DS,DATA BEING: MOV AX , DATA

MOV DS , AX MOV BX , 0 MOV SI , 0 MOV DL , 2

LOP1: MOV CX , COUNT/2

LOP2: MOV AL , BYTE PTR BUF1[SI] MOV BL , AL ADD AL , BL

MOV BYTE PTR BUF2[BX] ,AL INC SI

INC SI LOOP LOP2 MOV SI ,1 DEC DL JNE LOP1 MOV 4CH INT 21H COSEG ENDS

END BEING

20. TEST DX , 01H

JE L1

L1: ……

上述程序段运行后使DX中的数据形成偶数,如原来已是偶数,DX中内容不变;如DX中原来是奇数,试回答:

(1)用加1形成偶数,这时空白处应填一条什么指令? INC DX

(2)用减1形成偶数,这时空白处应填一条什么指令? DEC DX

21.DA1 DB 2,3,7,0AH,0FH,4,5,9,8,0CH XOR AX , AX ; AX=0 MOV CL , 0 ; CL-0

MOV BX , 0 ; BX=0

LOP: TEST DA1[BX] , 01H ;测试存储单元的数据是否偶数 JE NEST ; 是偶数,则跳转 ADD AL , DA1[BX] ;是奇数,将其累加

INC AH ; 计算奇数个数 NEXT:INC BX ;指向下一个存储单元 INC CL ;数据个数计数器

CMP CL , 10 ;运行后,(AL)=奇数之和=39=27H JNE LOP ;(AH)=10 上述程序运行后,AH和AL的内容分别是多少?

22. AA1 DB 10H DUP(2)

AA2 DW 10H DUP(0304H)

……

MOV BX , 0 ;设置数据指针

MOV AL , 0 ;设置累加器初值

MOV CX , 10 ;设置计数器初值

BB1: ADD AL , AA1[BX] ;累加

ADD AL , BYTE PTR AA2[BX] ;累加

INC BX ;修改数据指针

LOOP BB1 ;循环10次 上述程序段运行期间,当执行完 INC BX 且 (BX)=05H时,CX和AL中的内容分别是多少? 解:(AL)=2+4+2+3+2+4++2+3+2+4=28=1CH , (CX)=6 23.

DB1 DB 4 DUP(2,4,6,8) ……

LEA BX , DB1 MOV CX , 10H MOV AX , 0 LOP: ADD AL , [BX] AND AL , 0FH CMP AL , 8 JBE NEXT INC AH

SUB AL , 08H

NEXT:LOOP LOP

上述程序段执行后,(AX)=?如果LOOPNE指令替代LOOP指令,那么上述程序段执行后,(AX)=? (CX)=?

解:

由上表可知道,上述程序段执行后,(AX)=0600H,(CX)=0

如果LOOPNE指令替代LOOP指令,那么上述程序段执行后,(AX)=0300H (CX)=8

24. 下面程序段是判断寄存器AH和AL中第三位是否相同,如相同,AH置0,否则AH置非0。试在空白处填上适当的指令(一个空白处只填一条指令)。

AND AH , 08H

MOV AL , 0FFH JMP NEXT ZERO: MOV AH , 00 NEXT: ……

25. 试用两条指令完成对寄存器AH和AL分别加1,且AL中加1形成的进位加在AH最低位,AH中形成的进位加在AL的最低位.

解: INC AX , 0101H

ADC AL , 0

26. 在数据段中有一乘法表(TAB1~TAB9),乘数和被乘数分别在MUL1和MUL2的字节单元中.试编写一程序,用查表法求出(MUL1)*(MUL2)的乘积.数据段如下: DATA SEGMENT

TAB1 DB 1,2,3,4,5,6,7,8,9 TAB2 DB 2,4,6,8,10,12,14,16,18 TAB3 DB 3,6,9,12,15,18,21,24,27 TAB4 DB 4,8,12,16,20,24,28,32,36 TAB5 DB 5,10,15,20,25,30,35,40,45, TAB6 DB 6,12,18,24,30,36,42,48,54 TAB7 DB 7,14,21,28,35,42,49,56,63 TAB8 DB 8,16,24,32,40,48,56,64,72