您好,欢迎访问三七文档
注意:1.不允许立即数直接送段寄存器。2.目的操作数不能为立即数和CS段寄存器。3.不能实现存储单元之间的数据传送。4.不允许两个段寄存器之间直接传送信息。5.操作数类型要匹配,字对字,字节对字节。1.判断下列指令是否正确。若不正确,指出错误原因。(1)MOVDS,SS内容应由AX传送(2)MOVAH,DX寄存器类型不匹配(3)MOV[BX],[SI]不能在两个内存单元之间传递参数(4)MOVCS,[1000]CS不能为目的操作数(5)INC[BX]内存单元的内容类型不确定,可能是字节或字(6)MOVAX,[BX+DX]DX不能做基址寄存器(7)MOVAX,[DI][SI]DI和SI不能一起用(8)XCHGAX,2000H两个操作数之间的任意一个都不能是立即数(9)INAL,BX此指令的源操作数只能是DX(10)XCHGBX,IPIP不能做任一操作数2、若某数据区得开始地址为A7F0H:2B40H,则该数据区得首字单元和32个字的末字单元的物理地址分别为多少?解;首地址(A7F0H*10H)+2B40H=AAA40H;AAA40H+(20H-1)*2=AAA7EH3、若[DS]=6100H,则当前数据段的起始地址是什么?末地址为多少?解:起始地址:61000H;段的长度为64K,61000H+FFFFH=70FFFH。4、设一个字节数据X存放在AL寄存器中,试说明下列程序的功能。XORAH,AHSALAX,1MOVBX,AXMOVCL,2SALAX,CLADDAX,BX完成(AL)X10的功能,即10X。•5、假设AX=0078H,BX=06FAH,CX=1203H,DX=4105H,CF=1,下列每条指令单独执行后,标志位CF,OF和ZF的值是多少?•DECBX不影响标志位•DIVCH所有标志位无定义•MULBX,若乘法结果DX包含有效值C=1,OF=1,其他不定。否则OF=0、CF=0•SHRAX,CLC=0,ZF=0,其他不定(进位移)•ANDAL,0F0HC=0,Z=0,O=0。AND指令每次操作都使CF清0,6、假设在下列程序段的括号中分别填入以下命令:1、LOOPLLL;2、LOOPNZLLL;3、LOOPZLLL。判断CX≠0且ZF=1指令执行后,AX=?BX=?CX=?DX=?程序如下:ORG0200HMOVAX,10HMOVBX,20HMOVCX,04HMOVDX,03H•LLL:INCAX•ADDBX,BX•SHRDX,1•()•HLT1、AX=0014H,BX=200H,CX=0000H,DX=0000H2、AX=0012H,0080H,0002H,0000H3、0011H,0040H,0003H,0001H编写一内存自检程序,检查从2000H:0000H开始的64KB是否损坏,若损坏转RAM_ERR,若完好转RAM_OK解检查内存的一般方法是先往内存的每一单元写一个特征字,稍后再读出来看是否还是那个特征字,如果每个单元都正确,则内存完好。一般往里面写两次特征字,一次写55H,一次写0AAH,这样操作是保证每个单元的每一位既能写1又能写0,确保安全。程序如下:MOVAX,2000HMOVES,AXMOVDI,0MOVCX,8000HMOVAX,5555HCLDREPSTOSW;先给每一单元写入55HMOVCX,8000HMOVDI,0REPESCASW;扫描每个单元是否为55H?JNZRAM_ERR;有错转RAM_ERRMOVCX,8000HMOVDI,0MOVAX,0AAAAHREPSTOSW;再给每一单元写入0AAHMOVCX,8000HMOVDI,0REPESCASW;扫描每个单元是否为0AAH?JNZRAM_ERR;有错转RAM_ERRRAM_OK:;内存完好处理程序段RAM_ERR:;内存损坏处理程序段作业:下面程序片段中有两条转移指令,试计算这两条指令的位移量。左边为逻辑地址及机器码,右边为指令助记符。13BA:001BF3REPZ13BA:001CA6CMPSB13BA:001D75?JNZ0020①13BA:001FCBSAME:RET13BA:002041FOUND:INCCX13BA:0021890E0600MOV[0006],CX13BA:0025EB?JMP001F②解JNZ0020指令的位移量为:目的地址-IP的当前值=0020H-001FH=01H。位移量为正,表明由低地址向高地址转移。JMP001F指令的位移量为:目的地址-IP的当前值=001FH-0027H=-8H,负数取补码,位移量为F8H。位移量为负,表明由高地址向低地址转移。作业:试编一程序,求三个带符号字数据块中的最大值,并将最大值存入MAX字单元中。编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。(1)•程序如下:•STACSEGMENTSTACK•DB200DUP(0)•STACKENDS•DATASEGMENT•XDW00ABH•YDW–5•ZDW200•MAXDW?•DATAENDS•CODESEGMENT•ASSUMEDS:DATA,SS:STACK,CS:CODE•START:MOVAX,DATA•MOVDS,AX•MOVAX,X•CMPAX,Y;X>Y?•JGL1•MOVAX,Y;Y>Z?•CMPAX,Z•JGEXIT•L2:MOVAX,Z•JMPEXIT••L1:CMPAX,Z;X>Z?•JLEL2•EXIT:MOVMAX,AX•CODEENDS•ENDSTART(2)程序如下:•DATASEGMENT•SUMDW?•CNDW?•DATAENDS•CODESEGMENT•ASSUMECS:CODE,DS:DATA•START:MOVAX,DATA•MOVDS,AX;初始化•MOVAX,0;0送AX•MOVBX,0;0送BX•LP:INCBX;BX加1•ADDAX,BX;求累加和•CMPAX,1000;比较•JBELP;≤1000转•MOVSUM,AX•MOVCN,BX;送结果••CODEENDS•ENDSTART;汇编结束作业:1、求表达式Z=(10X+4Y)/2的值(X、Y为字节型变量,Z为字型变量)2、键盘输入一字符串(最大为80个)存入BUFFER缓冲区,并将实际键入的字符个数以十进制数显示输出。程序如下:DATASEGMENTXDB66HYDB35HZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXXORAX,AXMOVAL,XSHLAX,1;2XMOVBX,AXSHLAX,1;4XSHLAX,l;8XADDBX,AX;2X+8XMOVAH,0MOVAL,YSHLAX,1;2YSHLAX,1;4YADDBX,AX;10X+4YSHRBX,1;(10X+4Y)/2MOVZ,BXMOVAH,4CHINT21HCODEENDSEND先利用9号功能调用显示提示信息,再利用10号功能调用输入字符串。因实际键入字符个数在BUFFER+1单元,是二进制数,所以需要进行二进制数到十进制数的转换,才能显示输出。程序如下:CRLFMACROMOVAH,2MOVDL,0DHINT21HMOVAH,2MOVDL,0AHINT21HENDMDATASEGMENTSTRINGDB′INPUTSTRING----′,0DH,0AH,′$′BUFFERDB80,0,80DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXLEADX,STRINGMOVAH,9INT21HLEADX,BUFFERMOVAH,0AHINT21HCRLF;宏调用MOVAL,BUFFER+1;实际键入字符个数送ALMOVAH,0MOVCL,10DIVCLMOVCL,AHMOVDL,30HADDDL,ALMOVAH,2INT21HMOVDL,CLADDDL,30HMOVAH,2INT21HMOVAX,4C00HINT21HCODEENDSEND•1、为了减轻总线负载,总线上的部件大都具有三态逻辑,三态逻辑电路输出信号的3个状态是()•处理器总线物理上的含义是()•2、8086在最大模式和最小模式下,引脚信号有什么不同?•3、简述总线的三种数据传输方式。
本文标题:微机作业
链接地址:https://www.777doc.com/doc-5603718 .html