王爽汇编第二章答案

检测点2.1

mov ax,62627       AX  =  F4A3H

mov ah,31H         AX  =  3143H

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

解析:
十六进制相加,如果相加之和大于16,那么以16进1。
八/十六位数据与八/十六位位寄存器进行相加,八/十六位位寄存器与八/十六位寄存器相加
如果八位寄存器相加后越出那一部分不算!比如八位寄存器算出来是82CH 那么只取2CH.

(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方
  到目前为止,我们只学习了add和mov这二个指令
  mov ax,2    ax = 2
  add ax,ax   ax = 4
  add ax,ax   ax = 8
  add ax,ax   ax = 16

 

(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为   到    。

 

 

 

 

 

 

 

 

(2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为1001H,最大为2000H。

当段地址给定为1001H以下和2000H以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。

解题过程:

物理地址=SA*16+EA

20000h=SA*16+EA

SA=(20000h-EA)/16=2000h-EA/16

EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值

EA取最小值时,SA=2000h-0h/16=2000h,SA为最大值

 

检测2.3

1、下面的3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP中的值是多少?

 

mov ax,bx  => 读取到指令缓冲器中 => 修改IP =>执行该指令

sub  ax,ax     =>   读取到指令缓冲器中 => 修改IP =>执行该指令

jmp  ax    => 读取到指令缓冲器中 => 修改IP =>执行该指令 =>之后完之后由于jmp指令再次修改ip

所以一共是 4 次 修改ip,AX = AX - AX = 0;

    

 

 

指令的执行过程

1:CPU从当前的CS和IP指向内存单元,读取指令,然后将读取的指令 进入到指令缓冲器中。

2:IP = IP + 所读指令的字节数(长度),从而指向下一条指令

3:执行 指令缓冲器中的内容,回到第一步。

 

2、将下面3条指令写入 从2000:0开始的内存单元中,利用3条指令计算2的8次方

首先 2^8 = 256(转化为16进制等于0100h)

 2000: 0000   mov ax,1  

 2000:0005    add ax,ax

 2000:0005    jmp 2000:005

 

 3、查看内存中的内容

PC机主板上的ROM中写有一个生产日期,在内容FFF00H ~ FFFFFH的某几个单元中,

请找出这个生产日期并试图改变它

 

 生产日期也就是在FFF0:00F0

 

 因为是ROM内存,这是一个可读不可写的内存,所以我们尝试去修改是没什么作用的~ 

4、向内存 从B810:0000 开始的内存单元中填写数据

-e B810:0000 01 01 02 02 03 03 04 04

 

 为什么会显示那些小东西,是由于B810:0000这块内存是一块显存,至于为什么会显示这些东西,暂时还不清楚~ 

 

posted @ 2021-09-04 17:10  小姚yyy  阅读(198)  评论(0编辑  收藏  举报