微机原理第三章习题答案.docx

上传人:b****2 文档编号:17106902 上传时间:2023-07-22 格式:DOCX 页数:10 大小:18.17KB
下载 相关 举报
微机原理第三章习题答案.docx_第1页
第1页 / 共10页
微机原理第三章习题答案.docx_第2页
第2页 / 共10页
微机原理第三章习题答案.docx_第3页
第3页 / 共10页
微机原理第三章习题答案.docx_第4页
第4页 / 共10页
微机原理第三章习题答案.docx_第5页
第5页 / 共10页
微机原理第三章习题答案.docx_第6页
第6页 / 共10页
微机原理第三章习题答案.docx_第7页
第7页 / 共10页
微机原理第三章习题答案.docx_第8页
第8页 / 共10页
微机原理第三章习题答案.docx_第9页
第9页 / 共10页
微机原理第三章习题答案.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理第三章习题答案.docx

《微机原理第三章习题答案.docx》由会员分享,可在线阅读,更多相关《微机原理第三章习题答案.docx(10页珍藏版)》请在冰点文库上搜索。

微机原理第三章习题答案.docx

微机原理第三章习题答案

习题3答案

1.指出下列指令的错误原因。

(1)ANDAX,DL;类型不匹配

(2)ADDCS,DX;CS不能作为目的操作数

(3)MOVAX,IP;IP不能作为指令的操作数

(4)MOV[BP][SI],[SI];两个操作数不能同时为内存操作数

(5)SUB[BP][SI],ES:

DX;段超越前缀只能用在内存操作数之前

(6)XCHGAL,[SI][DI];没有[SI][DI]这种操作数形式

(7)JGEAX;条件转移指令的操作数只能是标号

(8)PUSHDL;对堆栈不能进行字节操作

2.用一条指令将BX清0。

(请给出3种方法)

方法1:

MOVBX,0

方法2:

SUBBX,BX

方法3:

ANDBX,0;将BX和0做与,可以将BX清零

方法4:

XORBX,BX

3.写出实现下列功能的指令序列。

(1)判断AX的值,若AX等于0,则转到标号LABEL处。

(请写出3种方法)

方法1:

CMPAX,0

JZLABEL;如果ZF=0,说明AX为0,因为CMP指令是做减法,但是不写回结果

;因此指令执行后AX内容不会受到破坏

方法2:

TESTAX,0FFH

JZLABEL;如果ZF=0,说明AX为0,TEST指令做与运算,可是不写回结果,只影响标志位。

;和0与清零,和1与不变,所以和FFH做与的结果是AX本身,但是此时标志位已

;经改变了,所以可以利用标志位来判断,但是AX内容却没有受到任何破坏

方法3:

ANDAX,0FFH;这个方法的原理和方法2其实是完全一致的

JZLABEL

(2)将AL的高4位与低4位分别放入AH与AL的低4位,并将AH与AL的高4位清0。

MOVAH,AL

ANDAL,0FH;AL高4位通过与清零,而低4位保持不变

MOVCL,4

SHRAH,CL;这两条指令通过逻辑右移将AH的高4位清零,因为SHR在右移后,高位补零

(3)若AX和BX中的数恰好1个是奇数、1个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。

TESTAX,01H;TEST做与运算,通过与来检测AX的最低位

JNZCONTINUE;如果ZF=1,说明AX的最低位是0,那么AX中的数是偶数,就跳转,否则,

;说明AX中的是奇数,而BX中的是偶数,符合结果要求,不用动了

XCHGAX,BX

CONTINUE:

….

4.分析下列指令序列完成什么功能。

MOVCL,4

SHLDX,CL

MOVBL,AH

SHLAX,CL

SHRBL,CL

ORDL,BL

答案:

将DX.AX中的32位数整体逻辑左移4位。

5.给出下列各条指令执行后AL以及CF、OF、SF、和ZF的值。

指令

AL

CF

OF

SF

ZF

备注

MOVAL,100

100/64H

XORAL,AL

100/64H

0

0

1

0

XOR后CF=OF=0,其余据结果设置

MOVAL,-1

-1/0FFH

0

0

1

0

MOV指令不影响标志位

INCAL

0

0

0

0

1

INC不影响CF,其余据结果设置

NOTAL

0FFH

0

0

0

1

NOT指令不影响标志位

SHLAL,1

0FEH

1

0

1

0

SHL据移出的位设CF,据结果设SF,ZF,一位移动,据移位前后最高位是否变化设置,有变化OF=1,无变化OF=0

CMPAL,10

0FEH

0

0

1

0

CMP指令根据结果设置6个标志位

SUBAL,7FH

7FH

0

0

0

0

SUB根据俄结果设置6个标志位

SHLAL,1

0FEH

0

1

1

0

解释同上

6.比较AX,BX和CX中无符号数的大小,将最小数放入AX中。

答案:

CMPAX,BX

JCBBB;如果AX<=BX,跳转

XCHGAX,BX;否则,交换AX和BX的值,将两者中的小值放到AX中去

BBB:

CMPAX,CX

JCCCC;如果AX<=CX,跳转

XCHGAX,CX;否则,交换AX和CX的值,将两者中的小值放到CX中去

CCC:

INT20H;返回DOS

7.变量定义伪指令与符号定义伪指令的主要作用是什么?

答案:

变量定义伪指令:

主要用来为某种类型(比如字节型、字型)的内存单元的地址指定一个可以引用的名字标识。

符号定义伪指令:

其实就是定义一个宏替换常量,用定义的符号代表一个文本串或者一个数值,在程序中遇到定义的符号时用相应的文本串或者数值去替换。

8.设有下列段定义:

DSEGSEGMENT

XDW1,3

DSEGENDS

给出下列两组指令序列分别执行后AX的值。

(1)MOVAX,DSEG

MOVDS,AX

MOVAX,X+1

(2)MOVAX,SEGX

MOVES,AX

MOVAX,ES:

X

INCAX

答案:

(1)(AX)=2

(2)(AX)=2

备注:

这两小段程序实现的功能是相同的,都是给子类型的变量X的值加1。

第二段程序采用了段超越方式来寻址操作数。

9.设有如下定义的数据段:

DATASEGMENT

ORG100

V1DW2DUP(20),$+10

BUF1DB‘100’,5

DD0

BUF2DW1,2,2A9H

LENEQUBUF2–BUF1

VADWBUF1

DATAENDS

则V1+1中存放的字节数据为(0),V1+4中存放的字数据为(114/72H),VA的内容为(106/6AH),LEN的值为(8)。

10.在数据段定义的两个变量S1和S2,要求设计一个完整的程序,将以S1为首地址的50个字节依次传送到以S2为首地址的内存单元中。

File1.ASM

datasgsegment

s1db25dup('12')

s2db50dup(0)

datasgends

codesgsegment

assumecs:

codesg,ds:

datasg

start:

movax,datasg

movds,ax

moves,ax

movsi,offsets1

movdi,offsets2

movcx,50

repmovsb

movax,4c00h

int21h

codesgends

endstart

11.从键盘读入一个字符串(长度<50),统计其字母、数字及其他字符的个数。

File2.asm

datasgsegment

buff1db50;最大能容纳的字符个数

countdb(?

);实际输入的字符个数

buff2db50dup(?

);实际字符缓冲区

lettersdb0;输入的字母个数

digitsdb0;输入的数字个数

othersdb0;输入的其他字符的个数

datasgends

codesgsegment

assumecs:

codesg,ds:

codesg

start:

movax,datasg

movds,ax

movdx,offsetbuff1;为0AH号系统功能调用准备输入参数DS:

DX指向输入缓冲区的首地址

movah,0ah

int21h

xoral,al

movch,0

movcl,count;CX中存放循环次数

movsi,offsetbuff2;为lodsb准备源地址,DS:

SI指向实际的字符串地址

cld

check:

lodsb;取一个数据到AL

cmpal,'A'

jcx1

cmpal,'Z'

jncx1

incletters;将字符串中的大写字母个数统计到letters变量中

jmpnext

x1:

cmpal,'a'

jcx2

cmpal,'z'

jncx2

incletters;将字符串中的小写字母个数统计到letters变量中

jmpnext

x2:

cmpal,'1'

jcx3

cmpal,'9'

jncx3

incdigits;将字符串中的数字字符统计到digits变量中

jmpnext

x3:

incothers;统计其他字符个数

next:

loopcheck

movax,4c00h

int21h

codesgends

endstart

12.设计一个程序,求10个无符号数中的最大值。

并将最大值存入变量MAX中。

File3.asm

datasgsegment

arraydb20,12,16,14,13,90,45,32,67,100;字节型数组

maxdb0

datasgends

codesgsegment

assumecs:

codesg,ds:

datasg

start:

movax,datasg

movds,ax

leasi,array;数组首地址

movcx,10;数组元素个数

cld;让地址值不断增大

lodsb;将第一个数组元素放到AL中

movmax,al

deccx

next:

lodsb;取下一个数组元素到AL中

cmpal,max

jcgoon;(al)<=max则max中的值不变

movmax,al;否则max=(al)

goon:

loopnext

movax,4c00h

int21h

codesgends

endstart

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2