王爽汇编第二章答案
检测点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这块内存是一块显存,至于为什么会显示这些东西,暂时还不清楚~