
微机原理作业解答.ppt
29页注意:1.不允许立即数直接送段寄存器 2.目的操作数不能为立即数和CS段寄存器3.不能实现存储单元之间的数据传送 4.不允许两个段寄存器之间直接传送信息 5.操作数类型要匹配,字对字,字节对字节1.判断下列指令是否正确若不正确,指出错误原因 (1)MOV DS,SS 内容应由AX传送 (2) MOV AH,DX 寄存器类型不匹配 (3)MOV [BX],[SI] 不能在两个内存单元之间传递参数 (4) MOV CS ,[1000] CS不能为目的操作数 (5)INC [BX] 内存单元的内容类型不确定,可能是字节或字(6) MOV AX,[BX+DX] DX不能做基址寄存器 (7)MOV AX,[DI][SI] DI和SI不能一起用 (8) XCHG AX,2000H 两个操作数之间的任意一个都不能是立即数 (9)IN AL,BX 此指令的源操作数只能是DX (10)XCHG BX,IP IP不能做任一操作数2、若某数据区得开始地址为A7F0H:2B40H,则该数据 区得首字单元和32个字的末字单元的物理地址分别为多 少? 解;首地址(A7F0H*10H)+2B40H=AAA40H; AAA40H+(20H-1)*2=AAA7EH 3、若[DS]=6100H,则当前数据段的起始地址是什么?末 地址为多少? 解:起始地址:61000H;段的长度为64K, 61000H+FFFFH=70FFFH。
4、设一个字节数据X存放在AL寄存器中,试说明下 列程序的功能XOR AH,AHSAL AX,1MOV BX,AXMOV CL,2SAL AX,CLADD AX,BX完成(AL)X10的功能,即10X• 5、假设AX=0078H,BX=06FAH,CX=1203H ,DX=4105H,CF=1,下列每条指令单独执行 后,标志位CF,OF和值是多少? • DEC BX 不影响标志位 • DIV CH 所有标志位无定义 • MUL BX,若乘法结果DX包含有效值C =1, OF=1,其他不定否则OF=0、CF=0 • SHR AX,CL C=0,ZF=0,其他不定(进位 移) • AND AL,0F0H C=0,Z=0,O=0 AND指令每 次操作都使CF清0,6、假设在下列程序段的括号中分别填入以下命令: 1、LOOP LLL;2、LOOPNZ LLL;3、LOOPZ LLL判断CX ≠0且ZF=1指令执行后,AX=?BX= ?CX=?DX=? 程序如下: ORG 0200HMOV AX,10HMOV BX,20HMOV CX,04HMOV DX,03H• LLL: INC AX • ADD BX,BX • SHR DX,1 • ( ) • HLT1、AX=0014H,BX=200H,CX=0000H, DX=0000H 2、AX=0012H,0080H,0002H,0000H 3、0011H,0040H,0003H,0001H编写一内存自检程序,检查从 2000H:0000H开始的64KB是否损坏,若 损坏转RAM_ERR,若完好转RAM_OK解 检查内存的一般方法是先往内存的每一单元 写一个特征字,稍后再读出来看是否还是那个特 征字,如果每个单元都正确,则内存完好。
一般 往里面写两次特征字,一次写55H,一次写 0AAH,这样操作是保证每个单元的每一位既能 写1又能写0,确保安全程序如下:MOV AX,2000HMOV ES,AXMOV DI,0MOV CX,8000HMOV AX,5555HCLDREP STOSW ;先给每一单元写入55HMOV CX,8000HMOV DI,0REPE SCASW ;扫描每个单元是否为55H?JNZ RAM_ERR ;有错转RAM_ERRMOV CX,8000HMOV DI,0MOV AX,0AAAAHREP STOSW ;再给每一单元写入0AAHMOV CX,8000HMOV DI,0REPE SCASW;扫描每个单元是否为0AAH?JNZ RAM_ERR ;有错转RAM_ERRRAM_OK: ;内存完好处理程序段RAM_ERR: ;内存损坏处理程序段作业: 下面程序片段中有两条转移指令,试计 算这两条指令的位移量左边为逻辑地址及机器 码,右边为指令助记符。
13BA:001B F3 REPZ 13BA:001C A6 CMPSB13BA:001D 75 ? JNZ 0020 ①13BA:001F CB SAME: RET13BA:0020 41 FOUND: INC CX13BA:0021 89 0E 06 00 MOV [0006],CX13BA:0025 EB ? J MP 001F ②解JNZ 0020指令的位移量为:目的地址-IP的当 前值=0020H-001FH=01H位移量为正,表明 由低地址向高地址转移JMP 001F指令的位移量为:目的地址-IP的当 前值=001FH-0027H=-8H,负数取补码,位 移量为F8H位移量为负,表明由高地址向低地 址转移 作业:试编一程序,求三个带符号字数据块中的最大值,并将最大值存入MAX字单元中编写程序完成求1+2+3+……N的累加和,直到累加和超过 1000为止。
统计被累加的自然数的个数送CN单元,累加和送 SUM1)• 程序如下: • STACSEGMENT STACK • DB 200 DUP(0) • STACKENDS • DATASEGMENT • X DW 00ABH • Y DW –5 • Z DW 200 • MAXDW ? • DATAENDS • CODESEGMENT• ASSUME DS: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? • JLE L2 • EXIT:MOV MAX,AX• CODEENDS • ENDSTART(2)程序如下:• DATA SEGMENT • SUM DW ? • CN DW ? • DATAENDS • CODESEGMENT • ASSUME CS:CODE,DS:DATA • START: MOV AX,DATA • MOV DS,AX ;初始化 • MOV AX,0 ;0送AX• MOV BX,0 ;0送BX • LP: INC BX ;BX加1 • ADD AX,BX ;求累加和 • CMP AX,1000 ;比较 • JBE LP ;≤1000转 • MOV SUM,AX • MOV CN,BX ;送结果 • • CODE ENDS • END START ;汇编结束作业:1、求表达式Z=(10X+4Y)/2的值(X、 Y为字节型变量,Z为字型变量)2、键盘输入一字符串(最大为80个)存入BUFFER 缓冲区,并将实际键入的字符个数以十进制数显示 输出。
程序如下: DATASEGMENT X DB 66H Y DB 35H Z DW ? DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATAMOV AX,DATAMOV DS,AXXOR AX,AX MOV AL,XSHL AX,1 ;2XMOV BX,AXSHL AX,1 ;4XSHL AX,l ;8X ADD BX,AX ;2X+8XMOV AH,0MOV AL,YSHL AX,1 ;2YSHL AX,1 ;4YADD BX,AX ;10X+4YSHR BX,1 ;(10X+4Y)/2MOV Z,BXMOV AH,4CHINT 21H CODEENDSEND先利用9号功能调用显示提示信息,再利用10号功能调用 输入字符串因实际键入字符个数在BUFFER+1单元, 是二进制数,所以需要进行二进制数到十进制数的转换 ,才能显示输出。
程序如下:CRLF MACROMOV AH,2 MOV DL,0DHINT 21HMOV AH,2MOV DL,0AHINT 21HENDM DATA SEGMENT STRING DB ′INPUT STRING----′,0DH,0AH, ′$′ BUFFERDB 80,0,80 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H LEA DX,BUFFER MOV AH,0AH INT 21H CRLF ;宏调用MOV AL,BUFFER+1 ;实际键入字符个数 送AL MOV AH,0 MOV CL,10 DIV CL MOV CL,AH MOV DL,30H ADD DL,AL MOV AH,2 INT 21H MOV DL,CL ADD DL,30H MOV AH,2 INT 21H MOV AX,4C00H INT 21H CODE ENDSEND• 1、为了减轻总线负载,总线上的部件大都具有 三态逻辑,三态逻辑电路输出信号的3个状态是 () • 处理器总线物理上的含义是()• 2、8086在最大模式和最小模式下,引脚信号有 什么不同? • 3、简述总线的三种数据传输方式。
