8086第三章作业。
3-11在实模式下,若段寄存器中装入如下数值,试写出每个段的起始地址和结束地址。
1)1000h 10000h-1ffffh
2)1234h 12340h-2233fh
3)e000h e0000h-effffh
4)ab00h ab000h-bafffh
3-12对于下列cs:ip组合,计算出要执行的下条指令存储器地址。
1)cs=1000h和ip=2000h 答:下条指令存储器地址:12000h
2)cs=2400h和ip=1a00h 答:下条指令存储器地址:25a00h
3)cs=1a00h和ip=b000h 答:下条指令存储器地址:25000h
4)cs=3456h和ip=abcdh 答:下条指令存储器地址:3f12dh
3-37 指出下列指令源操作数的寻址方式。
1) mov ax,1200h;立即数寻址。
2)mov bx,[1200h];直接寻址。
3)mov bx,[si];变址寻址
4)mov bx,[bx+si+1200];相对基变址寻址。
5)mov [bx+si],al;寄存器寻址。
6)add ax,[bx+di+20h];相对基变址寻址。
7)mul bl寄存器寻址。
8)jmp bx间接寻址。
9)in al,dx寄存器间接寻址。
10)inc word ptr[bp+50h] ;相对基址寻址。
小结:虽然对存储器的访问指令、输入/输出指令(in指令和out指令)、跳转指令(jmp指令)都有直接寻址和间接寻址,但是形式是有很大差别的:
1. 直接寻址:
1) 对于存储器的访问用方括号括起来的二进制数,如:mov bx,[1200h]
2) 对于输入/输出指令(in指令和out指令)用二进制数。
如:in ax,8fh 又如: out 78h,al
3) 对于跳转指令(jmp指令)是以目标标号为直接地址的。
如: jmp addr1
2.间接寻址:
1)对于存储器的访问有分为基址寻址、变址寻址、基址加变址寻址以及带位移量的所谓相对基址寻址、相对变址寻址、相对基址加变址寻址。
如:mov ax,[bp]
2) 对于输入/输出指令用dx做间接寻址寄存器。
如:in ax,dx 又如: out dx,al
3) 跳转指令直接写明寄存器即可 (段内)
如: jmp bx ;段内间接转移,cs不变,ip=(bx)
段间需组合:如: jmp dword ptr[bx+addr1];ds*4+bx+addr1为物理地址连续4个单元的内容作为目标地址。
3-38指出8086/8088下列指令中存储器操作数地址的计数表达式。
1) mov al,[di] 答:存储器操作数地址的计数表达式为:(ds)×16+(di)
2) mov ax,[bx+si] 答:地址的计数表达式为:(ds)×16+(bx)+(si)
3) mov 8[bx+si],al 答:地址的计数表达式为:(ds)×16+8+[(bx)+(si)]
4) add al,es:[bx] 答:地址的计数表达式为:(es)×16+(bx)
5) sub ax,[2400h] 答:地址的计数表达式为:(ds)×16+2400h
6) adc ax,[bx+di+1200h] 答:地址表达式为:(ds)×16+(bx)+(di)+1200h
7) mov cx,[bp+si] 答:地址的计数表达式为:(ss)×16+(bp)+(si)
8) inc byte ptr(di)答:地址表达式为:(ds)×16+(di)
注:段寄存器的分工:
1. **段(程序段):cs
2. 数据段:①一般ds;②当用bp(及其组合)间接寻址偏移量时,用ss段寄存器;③ 串操作时,源段(与si组合)用ds;目标段(与di组合)用es
3. 堆栈段:①与堆栈相关的指令;②当用bp(及其组合)间接寻址偏移量时,用ss段寄存器;
4. 附加段:①加段超越运算符(如38-(4);;串操作时,目标段(与di组合)用es
3-39 指出8086/8088下列指令的错误何在?
1.mov [si],ip答:ip不可访问:
2.mov cs,ax答:cs不可访问:
3.mov bl,si+2 答:类型不匹配,或者变址寻址寄存器未加方括号。应写成mov bl,[si+2]或mov bx,si+2
4.mov 60h,bl答:立即数不能做目标操作数。
5.push 2400h答:push的源操作数不能是立即数。
6.inc [bx答:对于间接寻址的存储单元加1指令,数据的长度必须用byte ptr、word ptr或dword ptr类型伪指令加以说明,否则,汇编程序不能确定是对字节、字还是双字加1。(p92)
7.mul –60h答:无符号乘法指令,操作数不能用立即数。
8.add [2400h],2ah答:[2400h]前要加类型说明。
9.mov [bx],[di] 答:在mov指令中,两个操作数不能都是存储器操作数。
10.mov si,al 答:两个操作数的长度不一样,类型不匹配。
有的同学所答非所问,问错在**,却作成了改成正确的。
3.40 mov cs,ax指令会带来什么错误?
答:这样做会影响后面指令,因为cs的改变不能按要求执行。提示遇到了无效指令。
3-41 阅读下列程序段,指出每条指令执行以后有关寄存器的内容是多少?
mov ax,0abch ;ax寄存器的内容是:0abch
dec axax寄存器的内容是:0abbh
and ax,00ffh ;ax寄存器的内容是:00bbh
mov cl,4cl寄存器的内容是:04h
sal al,1al寄存器的内容是:76h
mov cl,alcl寄存器的内容是:76h
add cl,78hcl寄存器的内容是:0eeh,push axss*16+sp)=0076h,ax寄存器的内容是:0076h
pop bxbx寄存器的内容是:0076h
3.42 指出ret与iret两条指令的区别,并说明各用在什么场合?
答:(1)ret与iret是两条返回主程序的返回指令,但ret是与过程(子程序)调用指令call对应使用的过程返回指令,而iret是与中断指令int n对应使用的中断返回指令。
2)ret指令应安排在过程的出口即过程的最后一条指令处,它的功能是从堆栈顶部弹出由call指令压入的断点地址值,迫使cpu返回到调用程序的断点去继续执行。
iret指令总是安排在中断服务程序的出口处,由它控制从堆栈中弹出程序断点送回cs和ip中,弹出标志寄存器内容送回f中,迫使cpu返回到断点去继续执行后续程序。
3.43 说明mov bx,data和mov bx,offset data指令之间的区别?
答:mov bx,data直接将data的值赋给bx,mov bx,offset data是将data在段内的偏移地址赋给bx.
3.44 给定ds=1100h,bx=0200h,list=0250h,si=0500h。试指出下面各条指令寻址存储器的地址。
1) mov list[si],edx ; pa=ds*16+list+si=11750h
2) mov cl,list[bx+si];pa=ds*16+list+bx+si=11950h
3) mov ch,[bx+si];pa=ds*16+bx+si=11700h
4) mov dl,[bx+100h];pa=ds*16+bx+100h=11300h
3.45 假定pc机存储器地地址区有关单元的内容如下:
20h)=3ch,(21h)=00h,(22h)=86h,(23h)=0eh,且cs=2000h,ip=0010h,ss=1000h,sp=0100h,flags=0240h,这是若执行int 8指令,试问:
1) 程序转向从何处执行(用物理地址回答)?
2) 栈顶6个存储单元的地址(用逻辑地址回答)及内容分别是什么?
答:(1)程序转向0e89ch处执行,中断服务程序的入口地址在00020h-00023h单元。
2) 栈顶6个单元的内容 1000h:00feh 0240h
1000h:00fch 2000h
1000h:00fah 0012h
注:执行int 8指令(2个字节)使f寄存器内容先入栈,断点再入栈保护,同时中断服务程序的入口地址赋值给 cs和ip
3-46 设sp=2000h,ax=3000h,bx=5000h,执行下列片段程序后,sp=?ax=?bx=?
push ax
push bx
pop ax
答:执行以上片段程序后,sp=1ffeh;ax=5000h;bx=5000h
注:8086/8088的堆栈方向与51单片机相反:执行push 堆栈指针被修改:sp-2sp
执行pop 堆栈指针被修改:sp+2 sp
3-48 设ax=5555h,bx=ff00h,执行下列片段程序后, ax=?bx=?cf=?
and ax,bxax=5500h
xor ax,axax=0000h
not bxbx=00ffh
微机原理作业与答案
第四章汇编语言程序设计。4 2 下列程序执行后,寄存器ax,bx,cx的内容分别是多少?d segment at 0202h 定位数据段地址。org 0202h 定位偏移地址。da word dw 20h mov ax,da wordax 0020h mov bx,offset da word bx...
微机原理作业答案
程序题作业答案 一 写指令 1 将di寄存器的内容减1dec di或 sub di 1 2 用一条指令使程序从中断服务程序返回 iret 3 从80h端口读入数据送入alin al,80h 4 将3000h及3001h两单元内容与ax寄存器内容相减,并将其差送回原单元。sub 3000h ax 5 ...
微机原理作业答案
第一次作业。2.完成下列补码运算,并根据结果设置标志sf zf cf和of,指出运算结果是否溢出。1 00101101b 10011100b 45 补。100 补。55 补。sf 1 zf 0 cf 0 of 0 无溢出。2 01011101b 10111010b 93 补。70 补。93 补。sf...