第二章习题答案

发布 2022-07-14 16:42:28 阅读 6518

1、 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果想要用。

某个段寄存器给出段地址,指令中如何表示?举例说明。

答:在直接寻址方式中,操作数默认的段地址是数据段,在段寄存器ds中。例如:

mov cl,[3120h] ;操作数地址为数据段内偏移地址为3120h的单元。如果想要用其它段寄存器给出段地址,必须在指令中给出段寄存器名。例如:

mov ax,ss:[2351h];

mov bx,es:[4af0h]等。

2、在寄存器间接寻址方式中,段地址如何确定?举例说明。

答: 当用bx、si、di进行寄存器间接寻址时,隐含的段地址在数据段ds中。操作数的地址为:

(ds)×16 +(bx或si或di)。例如:若(bx)= 1520h,(ds)= 1000h,则指令 mov al,[bx]中, 操作数地址为 11520h。

若用bp作为间址寄存器,则隐含的段地址在堆栈段ss中。例如:mov cx,[bp];操作数的地址为:(ss)×16 +(bp)。

3、若(cs)=2000h,(ds)=3000h,(ss)=4000h,(es)=3800h,(bx)=1230h,(di)=0250h

(si)=1580h,(bp)=2030h,写出下列指令中源操作数的物理地址:

(1)mov ax,[bx2)mov bx,[bp]

(3)mov cx,[bx+si+0050h] (4)es:mov bx,[si+bp]

答: (1)mov ax,[bx] 源操作数的物理地址:16(ds)+(bx)=30000h+1230h=31230h

2)mov bx,[bp] 源操作数的物理地址:16(ss)+(bp)=40000h+2030h=42030h

3)mov cx,[bx+si+0050h] 源操作数的物理地址:16(ds)+(bx+si+0050h)= 30000h +1230h+1580h+0050h=32800h

4)es:mov bx,[bp+si] 源操作数的物理地址:16(es)+(bp+si)=38000h+2030h+1580h = 3b5b0h

4、在当前数据段中有从data单元开始存放的100个字节数据,请编写程序找出数据中为零的数并把它们变为ffh ,记下为零数据的个数。

xor bx,bx ;记录零的个数的寄存器清零。

mov cx,100;比较数据的字节个数给cx寄存器。

lea si,data;取得数据段单元的首地址。

mov al,00h;将数据0给al寄存器。

again:cmp [si],al;比较al寄存器中的数据与数据段中数据是否相等。

jnz next;如果不相等就转移到next处。

inc bx;如果相等,bx寄存器的内容加1

mov [si],0ffh;将0ffh赋给为零的存储单元。

next: inc si;比较下一个存储单元。

dec cx;比较次数减1

jnz again;如果数据没比较完就继续比较。

hlt;暂停。

5、若(sp)=3500h,(ax)=2100h,(bx)=1850h,(cx)=0100h,(si)=1200h数据段中有效地址为1850h单元内容为65h,1851h单元内容为43h,1200h单元为35h,1201h单元为10h,执行下列执令后,寄存器sp,ax,bx,cx 中内容以及内存单元1850h,1851h,1200h,1201h单元内容各是什么?

push ax

push bx

mov ax,[bx]

sub [si],ax

mov [bx],cx

mov cx,ax

pop cx

答:(sp)=34feh, (ax)=4365h, (bx)=1850h, (cx)=1850h

(1850h)=00h, (1851h)=01h, (1200h)=d0h, (1201h)=cch。

6、请编写一个求两个两字节非压缩bcd码之和的子程序。

设被加数的地址指针为string1,被加数的地址指针为string2,结果的地址指针为result。

lea si,string1 ;(si)被加数地址指针。

lea bx,string2 ;(bx)加数地址指针。

lea di,result ;(di)结果地址指针。

mov cx,2cx)循环次数。

clc清进位标志。

next:mov al,[si] ;取一个字节的被加数。

adc al,[bx] ;与加数相加。

aaaascii调整。

mov [di],al ;送存结果。

inc sisi加1

inc bxbx加1

inc didi加1

dec cx循环次数减1

jnz next如不为0,转next

hlt停止。

7、下面这些指令中哪些是正确的?哪些是错误的?

add al,25hmov [1250h],[bx];

mov es,dsmov 35h,cl;

in al,dxadc ax, [si];

out 205h,alpop es;

push alrcl bl,cl;

sub [2164h],clmov ss,1000h;

mov bl, axmov ch, al;

mov ax, 55aahin ax, 20h;

push cspop cs;

in al,25hout dx,al;

答: 错误的有mov [1250h],[bx]; mov es,ds; mov 35h,cl; out 205h,al; push al; mov ss,1000h; mov bl, ax; pop cs;

8、若(al)=e8h,(bl)=24h ,(cf)=(zf)=0, 请指出下列各条指令执行后,标志cf, pf,zf,和sf的值。

1)add al,bl2)cmp al,bl

3)inc bl4)or al,bl

5)rcl al,16)shl bl,1

9、若(ax)=119bh,(bx)=51e8h,(cf)=1,(zf)=0,请写出以下程序的实际执行路线。

push ax

mov al,bl

nn1: jc nn2

and al,01h

nn2: sub al, bl

js nn3

xor bx,bx

pop ax

nn3: adc al,bl

jnc nn4

mov bh,ah

nn4: ret

答: 实际执行的路线为:

push ax

mov al,bl

nn1: jc nn2

nn2: sub al, bl

js nn3

nn3: adc al,bl;cf=1,sf=1,zf=0,pf=1

jnc nn4

mov bh,ah

nn4: ret

10、请叙述8088cpu执行段内调用指令 call的过程。

答: 8088cpu执行段内调用指令 call时,首先将当前ip值推入堆栈,(sp)←(sp)-2,

(sp)+1,(sp)] ip),然后,按照call指令中提供的位移量(16位)得到新的ip值,(ip) ←ip)+位移,cpu按照cs:ip给出的地址,去执行子程序。

11、带参数的返回指令ret n 用在什么场合? 设当前栈顶地址为3000h,当执行段内返回指令ret 4 后,sp的内容是什么?

答:带参数的返回指令ret n 用在从过程或子程序返回时,堆栈中有不再需要的数据要清除的场合。这些数据是调用过程或子程序时,通过堆栈向过程或子程序传递的参数。

若当前栈顶地址为3000h,当执行段内返回指令ret 4 后,sp的内容是3006h。

12、 什么是中断矢量和中断矢量表?举例说明8086/8088 如何根据中断类型号去得到中断矢量?

第二章习题答案

第二章习题。1 a企业受到票据。借 应收票据 468000 贷 主营业务收入 400000 应交税费 应交增值税 销项税额 68000 票据到期收回票款。借 银行存款 468000 贷 应收票据 468000 年计提利息。借 应收利息 6240 贷 财务费用 6240 票据到期收回票款。借 银行存款...

第二章习题答案

第二章。1.在立方点阵中画出下面的点阵面和结点方向。2.将下面几个干涉面 属立方晶系 按面间距的大小排列。解 立方晶系的面间距公式为,所以带入数据得到按面间距大小排列为 100 110 00 10 11 21 030 130 123 3.在六方晶系中h k i。证明1 如图,任意截面交和于c,d 过...

第二章习题答案

习题 2 1 为什么要研究流体的pvt关系?答 在化工过程的分析 研究与设计中,流体的压力p 体积v和温度t是流体最基本的性质之一,并且是可以通过实验直接测量的。而许多其它的热力学性质如内能u 熵s gibbs自由能g等都不方便直接测量,它们需要利用流体的p v t数据和热力学基本关系式进行推算 此...