计算机组成原理与汇编的课后答案 下载本文

内容发布更新时间 : 2024/5/3 22:34:18星期一 下面是文章的全部内容请认真阅读。

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)=? 解:

29

由上表可知道,上述程序段执行后,(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 TAB9 DB 9,18,27,36,45,54,63,72,81 MUL1 DB 3 MUL2 DB 6 PROD DB 0 DATA ENDS 解:

MOV BX,OFFSET DA1 MOV DL,MUL1 DEC DL MOV DH,00H ADD BX.DX MOV AL,MUL2 DEC AL MUL AL,9 ADD AL,DL

30

ADD BX,AX MOV AL,[BX] MOV PROD,AL

27. 试编写一程序,把DA_BY1字节存储单元的8位二进制数分解为3个八进制数,其中字高位八进制数存放在DA_BY2的字节单元中,最低位存放在DA_BY2+2单元中.例如数据单元定义如下:

DA_BY1 DB 6BH

DA_BY2 DB 3 DUP(0) 解:

LEA DI , DA_BY+2

MOV AL , DA_BY1

XOR AH , AH MOV DL , 3 MOV CL , 3 SHL AX , 3 LOP: SHR AL , CL PUSH AX

AND AL , 7 MOV [DI] , AL DEC DI DEC DL POP AX JNZ LOP

29.试编制一程序,统计DA_WORD数据区中正数, 0 , 负数的个数.数据区为: DATA SEGMENT

DA_WORD DW - 1,3,5,0, - 5, -7, - 4,0, -7, …… COUT1 DB $ - DA_WORD

COUT2 DB 0 ; 存放正数的个数

DB 0 ; 存放0的个数 DB 0 ; 存放负数的个数 解:

MOV BX , OFFSET DA_WORD ;BX指向数据区 MOV CX , COUT1 ;设置循环次数

LOP: MOV AX , [BX] ;取数 CMP AX , 0 ;比较

JE ZERO 小于0,转ZERO JL LESS ;负数,转LESS

31

INC COUT2 ;统计正数个数 ZERO: INC COUT2+1 ;统计0的个数 JMP NEXT

LESS: INC COUT2+2 ;统计负数个数

NEXT: INC BX ;BX指向下一个数据 LOOP LOP ;循环

30. 试编制一程序,完成在数据区内可任选下列两种数据之一,并显示排列结果.产生哪种数据排列,由键盘输入1或2来确定. 第一种排列:?0?,?A?,?1?,?B?,?2?,?C?, … ?9?,?J? 第二种排列:?A?,?0?,?B?,?1?,?C?,?2?, … ?J?,?9? 解:

DATA SEGMENT

DA1 DB ?0123456789? DA2 DB ?ABCDEFGHIJ? DATA ENDS ……

LEA SI , DA1 LEA DI , DA2 MOV CX , 10 MOV AH , 01H INT 21H CMP AL , 1 JE NEXT1 CMP AL , 2 JE NEXT2 JMP EXIT

NEXT1: MOV DL , [SI] MOV AH , 02H INT 21H

MOV DL , [DI] MOV AH , 02H INT 21H INC SI INC DI LOOP NEXT1 JMP EXIT NEXT1: MOV DL , [DI] MOV AH , 02H INT 21H

MOV DL , [SI] MOV AH , 02H INT 21H INC SI

32