汇编语言(王爽)课后习题答案

习题答案:仅供参考

课后题答案+解析:


检测点1.1

1:13                                                                                                                                   

2:1024 0 1023                                                                                                                          

3:2^13 2^10                                                                                                                            

4:2^30 2^20 2^10                                                                                                                       

5:64 1 16 4                                                                                                                            

6:1 1 2 2 4                                                                                                                            

7:512 256                                                                                                                             

8:二进制                                                                                                                               

题解:                                                                                                                                  

1:cpu的寻址能力是8KB,地址总线宽度为10根的寻址能力是1KB=1024b=2^10,所以2^x=8KB=8*1024=2^13                                             

所以x=13。                                                                                                                             

2:1B是一个存储单元,1KB=1024B,等于1024个存储单元,由于存储单元的范围是从(00000 00000 ~ 11111 11111)转化成十进制就是0~1023,所以存储单元

的编号是0到1023。                                                                                                                      

3:1B=8bit,1KB=2^10B=8*1024bit=2^13。                                                                                                   

4:1GB=1024*1KB=10241MB=1024*1024*1KB=1024*1024*1024*1B                                                                                

1GB=2^30B,1MB=2^20B,1KB=2^10B。                                                                                                        

5:10根地址总线的寻找能力是1KB,那么16是2^6KB,20是1024KB=1MB,24是2^4*1MB=16MB,32是1024*4*1MB=4GB。                                     

6:一根数据线,传输1bit,八根传输8bit,8bit=1B,那么答案分别是1,1,2,2,4。                                                            

7:8086每次读取2B(字节),1024B/2B=512次,80386每次读取4字节,那么答案:1024B/4B=256次。

检测点2.1

(1)写出每条汇编i指令执行后相关寄存器的中的值
mov ax,62627 AX=F4A3H
mov ah,31H AX=31A3H
mov al,23H AX=3123H
add ax,ax  AX=6246H
mov bx,826CH BX=826CH
mov cx,ax CX=6246H
mov ax,bx AX=826CH
add ax,bx AX=04D8H
mov al,bh AX=0482H
mov ah,bl AX=6C82H
add ah,ah AX=D882H
add al,6  AX=D888H
add al,al AX=D810H
mov ax,cx AX=6246H
(2)利用已写学习的汇编指令编写出2^4
mov ax,2  AX=2
add ax,ax AX=4
add ax,ax AX=8
add ax,ax AX=16 

检测点2.2

(1) 00010H,1000FH

(2) 1001H,2000H
 
 题解:
 (1)物理地址=给定段地址*16+(0~FFFF)
 所以范围:00010H+0H~00010H+FFFFH=(00010H~1000FH)
 (2)设给定段地址为XH:
 最大段地址:X*16=20000H
 X=2000H
 最小段地址:X*16+FFFF=20000H
 X*16=10001H
 但是X右移一位为1000H<1000.1H
 所以X=1001H
 
 思考
 所以当X<1001H或者X>2000H时,cpu无论怎么变化偏移地址都无法寻到20000H单元 

检测点2.3

下面的三条指令执行后,cpu几次修改IP?都是在什么时候,最后IP的值是多少?
mov ax,bx
sub ax,ax
jmp ax
答案:(1)4次
(2)
第一次读取mov ax,bx
第二次读取sub ax,ax
第三次读取jmp ax
第四次执行jmp ax
(3)
最后 IP的值是0,
假设CS=a,IP=b
那么执行完第一条指令后
CS=a,IP=b+2
ax=bx
执行完第二条指令
CS=a,IP=b+4
ax=0
执行完第三条指令
首先CS=a,IP=b+4
此时第三条指令读取完毕
然后执行第三条指令
IP=ax=0
CS=a,IP=0 
最后IP是0
 

检测点3.1

(1)
AX=2662H
BX=E626H
AX=E626H
AX=2662H
BX=D6E6H
AX=FD48H
AX=2C14H
AX=0000H
AX=00E6H
BX=0000H
BX=0026H
AX=000CH
(2)
CS=2000H,IP=0,DS=1000H
AX=0,BX=0

mov ax,6622H 
CS=2000H IP=3 DS=1000H AX=6622H BX=0000H
jmp 0ff0:0100 
CS=0ff0H IP=0100 DS=1000H AX=6622H BX=0000H 
mov ax,2000H 
CS=0ff0H IP=0103 DS=1000H AX=2000H BX=0000H
mov ds,ax 
CS=0ff0H IP=0105 DS=2000H AX=2000H BX=0000H
mov ax,[0008] 
CS=0ff0H IP=0108 DS=2000H AX=C389H BX=0000H
mov ax,[0002] 
CS=0ff0H IP=010B DS=2000H AX=EA66H BX=0000H
(3)
数据和程序在计算机中都是以二进制的形式存放的,
在区别程序和数据时,关键是看段地址,如果段地址是ds
段,说明该内存存放的是数据,如果段地址是cs段,说明该内存
存放的是指令。


检测点3.2

(1)
mov ax,2000
mov ss,ax
mov sp,0010 
(2)
mov ax,1000
mov ss,ax
mov sp,0000 
 

检测点 6.1

(1)
mov cs:[bx],ax
(2) 
cs
24h或36
pop cs:[bx]

检测点 9.1

(1)
1:db 0,0,0,0
2: dw 2 dup(0)
(2)
bx
cs
(3)
0006H
00BEH

注意:理解 word ptr 和 dword ptr的概念 

检测点 9.2

(1)
mov ch,0
mov cl,[bx]
jcxz ok
inc bx 

解释:我们要确保cx的高位为0
mov ch,0
mov cl,[bx]
如果当前的cx==0,那么执行jcxz jmp short ok 

检测点 9.3

(1)
inc cx

解释:不能让cx=0,不然在loop指令下无法退出,如果cx=0,我们让cx+1,
此时就可以退出了 

检测点 10.1

(1)
1000h,0
先把1000推入栈,在把0
retf 执行后,cs=1000,ip=0


检测点 10.2

(1)6
解释,
执行完call s 指令被读取完后,ip->6,然后执行call s指令,将 当前ip的值
压入栈,转跳到标号 s ,执行pop ax,此时ax=6


检测点 10.3

1000:0        mov ax,0
1000:3        call far ptr s 
1000:8        inc ax
1000:9        s:pop ax    
              add ax,ax    
              pop bx    
              add ax,bx    
(1)1010
ax=0
push 1000
push 0008
jmp 1000:9
pop ax,8  ax=0008
add ax,ax ax=0010
pop bx    bx=1000
add ax,bx ax=1010
(1) 3

assume cs:code

stack segment

dw 8 dup(0)

stack ends

code segment

start:

  mov ax,stack  ;ax=栈段地址

  mov ss,ax  ;  ss栈段地址=ax 

  mov sp,16  ; 栈顶偏移地址sp=16=10H

  mov ds,ax   ;段地址 ds=ax 和栈段一致

  mov ax,0

  call word ptr ds:[0Eh]  ; push ip ,ip= inc ax处的ip

    ; 此时 ss:0eh: inc ax处的ip

    ; ds=ss:[0]=ss:0eh

  inc ax        ;执行下面语句 

  inc ax

  inc ax         ax=3

  mov ax,4c00H  

  int 21H

code ends

end start
(2)
assume cs:code
data segment
    dw 8 dup (0)
data ends

code segment

start:  mov ax,data
        mov ss,ax
        mov sp,16
        mov word ptr ss:[0],offset s   
        mov ss:[2],cs                 
        call dword ptr ss:[0]         
        nop
s:      mov ax,offset s                
        sub ax,ss:[0cH]                
        mov bx,cs
        sub bx,ss:[0eH]               
        mov ax,4c00H
        int 21H

code ends

end start 
解释:
首先 我们让栈地址[0],[2]存放cs,和s标号处的ip,然后执行call dword ptr
ss:[0],此时 push nop 处的cs和ip,sub ax,ss:[0H],因为栈里存的是一条空语句地址。
所以ax=1,因为cs相同所以 bx=0 

检测点 11.1

(1)
          ZF  PF  SF
sub al,al 1   1   0 结果0b 1 1 0 为0 0个1 非负
mov al,1  1   1   0 传送指令不影响标志寄存器的状态
push ax   1   1   0 传送指令不影响标志寄存器的状态
pop bx    1   1   0 传送指令不影响标志寄存器的状态
add al,bl 0   0   0 结果10b 不为0 1个1 非负
add al,10 0   1   0 结果1100b 2个1 非负
mul al    0   1   0 结果10010000b 2个1 非负
(2)
            CF    OF     ZF    PF   SF
sub al,al   0     0      1     1     0             
mov al,10h  0     0      1     1     0
add al,90h  0     0      0     1     1
mov al,80h  0     0      0     1     1
add al,80h  1     1      1     1     0
mov al,0fch 1     1      1     1     0
add al,05h  1     0      0     0     0
mov al,7dh  1     0      0     0     0
add al,0bh  0     1      0     1     1 

检测点 11.3

(1)
jb s0
ja s0
(2)
jna s0
jnb s0

检测点11.4

(1)
45h
解释:通过操作标志寄存器的值为000000001000101b
最后ax的值是45H 

检测点 12.1

(1)0070:018BH
(2)4N,4N+2
解释:
可以查看段地址 0070=3*4+2位置
偏移地址:018B=3*4位置
 

你可能感兴趣的:(汇编语言,asm)