1.已知ds=2000h,bx=0100h,si=0002h,存储单元[20100h]~[20103h]依次存放12 24 56 78h,[21200h]~[21203h]依次存放2a 4c b7 65h,说明下列每条指令执行后ax寄存器的内容。
1) mov ax, 1200h
解:ax=1200h
3) mov ax, [1200h]
解:物理地址=ds×16+1200h=20000h+1200h=21200h,所以ax=4c2ah
5) mov ax, [bx+1100h]
解:物理地址=ds×16+bx+1100h=20000h+0100h+1100h=21200h ,所以ax=4c2ah
7) mov ax, [bx][si+1100h]
解:物理地址=ds×16+bx+si+1100h=20000h+0100h+0002h+1100h=21202h ,所以ax=65b7h
2) mov ax, bx
解:ax=0100h
4) mov ax, [bx]
解:物理地址=ds×16+bx=20000h+0100h=20100h,所以ax=2412h
6) mov ax,[bx][si]
解:物理地址=ds×16+bx+si=20000h+0100h+0002h=20102h,所以ax=7856h
2.指出下列指令错误。
1) mov cx, dl
答:数据类型不匹配,cx是16位,dl是8位。
2) mov ip, ax
答:指令指针不能直接修改。
3) mov es, 1234h
答:段地址寄存器不能直接置数。
4) mov es, ds
答:段地址ds不能做源操作数。
5) mov al, 300
答:300大于255,al是8位的,最多只能存255
6) mov [sp], ax
答:sp不能做间接寻址寄存器。
7) mov ax , bx+di
答:基址变址寻址必须打。
8) mov 20h, ah
答:立即数不能做目的地址单元。
3.已知数字0~9对应的格雷码依次为:18h、34h、05h、06h、09h、0ah、0ch、11h、12h、14h,它存放在于以tabel为首地址(设为200h)的连续区域中。对如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。
lea bx,table ;取表的首地址送bx,执行后(bx)=200h
mov al,8 ;立即数8送al,执行后,(al)=8
xlat查表,将表首地址+8((bx)+(al))所对应单元内容送al,
执行后,(al)=12h(8所对应的格雷码)
4.什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令?
答:堆栈是在内存中开的一个特殊的数据区,堆顶有堆栈指针sp与ss共同决定。
原则是:先进后出,两个操作:入栈、出栈,对应指令:push(入栈)、pop(出栈)。
5.已知ss=ffa0h,sp=00b0h,画图说明执行下列指令序列时,堆栈区和sp的内容如何变化?
mov ax , 8075h
push ax
mov ax , 0f79h
push ax
pop bx
pop [bx]
解:8.请分别用一条汇编语言指令完成如下功能:
1)把bx寄存器和dx寄存器的内容相加,结果存入dx寄存器。
解:add dx, bx
2)用寄存器bx和si的基址变址寻址方式把存储器的一个字节与al寄存器的内容相加,并把结果送al中。
解:add al, [bx+si] 或add al, [bx][si]
3)用寄存器bx和02bh的寄存器相对寻址方式,把存储器的一个字和cx寄存器的内容相加,并把结果送回存储器中。
解:add [bx+02bh] ,cx 或add 02bh [bx] ,cx
4)把数0a0h与al寄存器内容相加,并把结果送al中。
解:add al, 0a0h
10.指出下列指令错误。
1) xchg [si], 30h
答:立即数不能作为单元地址来保存数据,所以交换指令中的两个操作数必须是地址操作数。
2) pop cs
答:cs不能作为寻址寄存器使用。
3)sub [si], di]
答:算术运算指令中的两个操作数不能同时都在内存中。
4)push ah
答:push指令中的操作数必须是16位操作数,ah是8位。
5)adc ax, ds
答:ds不能做源操作数,6)out dx, ah
答:只能使用al(当端口数据位是8位)或ax(端口数据位是16位)与端**换数据。
7)in al 3fch
答:端口地址大于255时,必须有dx寄存器间接寻址。
20.假设ds=2000h,bx=1256h,si=528fh,位移量table=20a1h,[232f7h]=3280h,[264e5h]=2450h,试问执行下列段内间接转移指令后,转移的目的地址是什么?
1) jmp bx
2) jmp table[bx]
3) jmp [bx][si]
解:(1)jmp bx,目标地址的偏移量在bx中,所以转移的目的地址是cs:1256h(也可以直接写成有效地址ip=1256h)。
2) jmp table[bx],目标地址的偏移量在存储器单元中,该存储器单元有效地址为(bx)+ table中,所对应的物理地址=ds×16+(bx)+table=20000h+1256h+20a1h=232f7h,该单元存放的内容为3280h,所以jmp table[bx] 转移的目的地址是cs:3280h(也可以直接写成有效地址ip=3280h)
3) jmp [bx][si] 目标地址的偏移量在存储器单元中,该存储器单元有效地址为(bx)+ si)中,所对应的物理地址=ds×16+(bx)+(si)=20000h+1256h+528fh=264e5h,该单元存放的内容为4500h,所以jmp table[bx] 转移的目的地址是cs:4500h(可以直接写成有效地址ip=4500h)。
23.假设ax和si存放的是有符号数,dx和di存放的是无符号数,请用比较指令和条件转移指令实现以下判断:
1)若dx>di,转到above执行;
2)若ax>si,转到greater执行;
3)若cx=0,转到zero执行;
4)若ax-si产生溢出,转到overflow执行;
5)若si≤ax,转到less_eq执行;
6)若di≤dx,转到below_eq执行。
解:(1)cmp dx,di
ja above
2)cmp ax,si
jg greater
3)cmp cx,0
je zero
4)cmp ax,si
jo overflow
5) cmp si,ax
jle less_eq
6) cmp di,dx
jbe below_eq
微机原理及接口第三章作业答案
1 下列各条指令是否有错?如果有,请指出错误之处并改正。1 mov ds,1000h 2 mov 100 23h 3 add ax,bx bp 6 4 push dl 5 in ax,3fh 6 out 3ffh,al 7 les ss,si 8 pop ax 9 imul 4ch 10 shl b...
第三章作业
v s 顺序执行下述两个动作 1.s值加1,即s s 1 2.如果s 0,则该进程继续运行 3.如果s 0,则唤醒等待信号量s阻塞队列中的头一个进程 把阻塞态改为就绪态 执行v操作的进程继续运行。procedure s var s semaphore begin s s 1 if s 0 then ...
第三章作业
1 顺序栈空 栈满条件2 链栈栈空 栈满条件。3 循环队列队空 队满条件,如何表示队列中数据元素的个数4 链队列队空 队满条件。5 以下运算实现在顺序栈上的进栈,请在 处用适当的语句予以填充。int push sqstacktp sq,datatype x if sp top sqstack max...