微机原理和接口技术课后习题和参考答案解析(汇编) 下载本文

精品文档

std;DF=1,进行地址减量 rep movsb 3.13答:

MOV CL,4

MOV AL,BL ;处理最低位十六进制数 AND AL,0FH CMP AL,0AH JC DIGT4 ADD AL,7

DIGT4: ADD,AL,30H MOV L4,AL

MOV AL,BL ;处理次低位十六进制数 SHR AL,CL CMP AL,0AH JC DIGT3 ADD AL,7

DIGT3: ADD,AL,30H MOV L3,AL

MOV AL,BH ;处理次高位十六进制数 AND AL,0FH CMP AL,0AH JC DIGT2 ADD AL,7

DIGT2: ADD,AL,30H MOV L2,AL

MOV AL,BH ;处理最高位十六进制数 SHR AL,CL CMP AL,0AH JC DIGT1 ADD AL,7

DIGT1: ADD,AL,30H MOV L1,AL 3.14答:

精品文档

精品文档

LEA SI,BUF

LEA BX,ASC MOV CH,100 MOV CL,4

AGAIN: MOV AL,[SI] ;处理低位BCD码 AND AL,0FH ADD AL,30H MOV [BX],AL INC BX

MOV AL,[SI] ;处理高位BCD码 SHR AL,CL ADD AL,30H MOV [BX],AL INC BX INC SI DEC CH JNZ AGAIN

3.15答:(1)MOV BX,-78;(BX)=FFB2H MOVSX EBX,BX;(EBX)=FFFFFFB2H (2)MOV CL,-5;(CL)=FBH MOVSX EDX,CL;(EDX)=FFFFFFFBH (3)MOV AH,9;(AH)=9H MOVZX ECX,AH(ECX)=00000009H (4)MOV AX,87H;(AX)=87H MOVZX EBX,AX;(EBX)=00000087H

3.16答:MOV ECX,12345678H;(ECX)=12345678H BSF EAX,ECX ;(EAX)=00000003H BSR EBX,ECX;(EBX)=0000001CH 3.17答: MOV CX,100 LEA BX,TAB AGN: MOV AL,[BX] ADD AL,0 JP NEXT OR AL,80H

NEXT: OUT 10H,AL

精品文档

精品文档

INC BX LOOP AGN

3.18 答:假设数组的起始地址是BUFFER LEA BX,BUFFER MOV DX,0 MOV CX,100

ONCE: MOV AL,[BX]

TEST AL,80H;是正数还是负数 JNZ FUSHU;是负数,跳转 CMP AL,0;是0吗? JZ NEXT

INC DH;是正数,则DH加1

JMP NEXT

FUSHU: INC DL;是负数,则DL加1 NEXT: INC BX DEC CX JNZ ONCE

MOV POSIT,DH MOV NEGAT,DL

第四章 课后习题

4.1、汇编语言有何特点?编写汇编语言源程序时,一般的组成原则是什么? 4.2、.MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪几种存储模式,各用于创建什么性质的程序?

4.3、如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?

4.4、逻辑段具有哪些属性?完整代码段定义时的默认属性是什么?小型模式下的简化代码段定义具有的默认属性是什么?

4.5、 DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么? 4.6、给出下列语句中,指令立即数(数值表达式)的值: (1)mov al,23h AND 45h OR 67h (2)mov ax,1234h/16+10h (3)mov ax,254h SHL 4

(4)mov al,’a’ AND (NOT(‘b’一 ‘B’)) (5)mov ax,(76543 LT 32768)XOR 7654h

4.7、画图说明下列语句分配的存储空间及初始化的数据值:

精品文档

精品文档

(1) byte_var db ‘BCD’,10,10h,’EF’,2 dup (一l,?,3 dup(4)) (2) word_var dw 1234h,一5,6 dup(?) 4.8、设置一个数据段,按照如下要求定义变量:

(1)myl_b为字符串变量,表示字符串“Personal Computer!” (2)my2_b为用十六进制数表示的字节变量,这个数的大小为100 (3)my3_w为100个未赋值的字变量 (4)my4_c为100的符号常量

(5)my5_c为字符串常量,代替字符串“Personal Computer!”

4.9、假设opw是一个字变量,opbl和opb2是两个字节变量,指出下列语句中的具体错误原因并改正错误。

(1) mov byte ptr [bx],256 (2) mov bx,offset opw[si] (3) add opbl,opb2 (4) mov opbl,al+l (5) sub al,opw (6) mov [di],1234h

4.10、编制一个程序,把字变量X和Y中数值较大者存入MAX字单元;若两者相等,则把-1存入MAX中。假设变量存放的是有符号数。

4.11、设变量DAT为有符号16位数,请编写程序将它的符号状态保存在sign字节单元,即:如果变量值大于等于0,保存0;如果变量值小于0,保存-1。 4.12、 X、Y和Z是3个有符号字节数据,编写一个比较相等关系的程序: (1)如果这3个数都不相等,则显示N;

(2)如果这3个数中有两个数相等,则显示X; (3)如果这3个数都相等,则显示Y。

4.13、编制程序完成12H,23H,F3H,6AH,20H,FEH,10H,C8H,25H和34H共10个无符号字节数据之和,并将结果存入字变量SUM中。

4.14、求出主存从2000H:0开始的一个64KB物理段中共有的空格个数,存入DX中。

4.15、过程定义的一般格式是什么?子程序开始为什么常有PUSH指令,返回前为什么有POP指令?下面完成16位无符号数累加的子程序是否正确?若有错,请改正。 jiafa PROC

push ax xor ax,ax xor dx,dx

again: add ax, [bx]

精品文档