汇编学习--第二天

第三章 寄存器

3.4

汇编学习--第二天

 

问题3.5

汇编学习--第二天

汇编学习--第二天

汇编学习--第二天

 

检测点 3.1

(1)

mov ax,1  
mov ds,ax  
mov ax,[0] 2662h
mov bx,[1] e626h
mov ax,bx e626h
mov ax,[0] 2662h
mov bx,[2] d6e6h
add ax,bx fd48h
add ax,[4] 2c14h
mov ax,0 0h
mov al,[2] 00e6h
mov bx,0 0h
mov bl,[c] 0026h
add al,bl 000ch

 

段地址:偏移地址只是表示物理地址的方式,我们查看数据地址只看 段地址*16+偏移地址 的结果,例如0110:0000和0000:1100就是同一地址,数据相同。

汇编学习--第二天

 

(2)

第一问:执行序列:

1)mov ax,6622h

2)jmp 0ff0:0100

3)mov ax,2000

4)mov ds,ax

5)mov ax,[8]

6)mov ax,[2]

 

第二问

汇编学习--第二天

 

汇编学习--第二天

汇编学习--第二天

 

(3)数据和地址有区别,程序(指令)是对8086CPU运行顺序的改变,数据是对地址中数据的改变,显著区别就是操作指令的不同。

 

3.6 栈

mov ax,0123h

push ax

mov bx,2266h

push bx

mov cx,1122h

push cx

pop ax

pop bx

pop cx

 

汇编学习--第二天

汇编学习--第二天

 

任意时刻,SS:SP指向栈顶元素

 

问题 3.6

因为在执行命令之前,SP=SP-2,第一次执行命令的栈顶位置在1000E==>SS:1000H   SP=000EH

所以在第一次执行命令之前的位置在SP=SP+2==>SP:0010H

 

push先操作地址-2,再执行命令;pop先执行命令,再操作地址+2。

 

3.8 栈顶越界问题

 

问题 3.7

汇编学习--第二天

 

问题 3.8

mov ax,2000
mov ss,ax
mov sp,10
mov ax,1a
mov bx,1b
push ax
push bx
mov ax,0
mov bx,0
pop bx
pop ax

 

汇编学习--第二天

 

栈地址,段地址和内存地址不能使用同一地址,不然指令会是“乱指令”

???在问题3.12下讲栈段和数据段到同一地址,但是运行时出错。可能电脑问题,暂时放这。

猜测,应该是栈段和数据段同时使用同一地址,会出现“乱指令”

 

汇编学习--第二天

汇编学习--第二天

汇编学习--第二天

 

问题 3.9

实际上这里就是一个出栈问题,这里只要将上面代码AX,BX出栈顺序换一下就行。

mov ax,2000
mov ss,ax
mov sp,10
mov ax,1a
mov bx,1b
push ax
push bx
mov ax,0
mov bx,0
pop ax
pop bx

汇编学习--第二天

 

问题 3.10

把10000H处作为段空间就行

mov ax,1000
mov ss,ax
mov sp,2

汇编学习--第二天

汇编学习--第二天

汇编学习--第二天

 

3.10 栈段

问题 3.11

10000H~1FFFFH为栈空间,和之前一样,第一条指令在SS:1000,SP:FFFEH==>SP = SP + 2----SP:0000H

 

问题 3.12

SP变化是在0000H~FFFFH,每个内存空间1B,总共16*16*16*16=65536B,也就是64KB

 

检测点 3.2

(1)

mov ax,2000H
mov ss,ax
mov sp,10H

(2)

mov ax,1000H
mov ss,ax
mov sp,0H

 

实验2

(2)

d ds:10 18  ;查看1000:0010~1000:0018中的内容

d cs:0  ;查看当前代码段中的指令代码

d ss:0  ;查看当前栈段中的内容

 

u cs:0  ;以汇编指令的形式,显示当前代码段中的代码

a ds:0  ;以汇编形式从1000:0开始的内存写入指令

 

1--(3)

Debug的T命令在执行修改寄存器SS指令之后,下一条指令也紧接着被执行,也就是不会再DOSBOX上显示

 

2.实验任务

(1)

代码存入之后,T指令执行,D指令查看内存就行

汇编学习--第二天

汇编学习--第二天

 

(2)

 猜测栈空间被写入了数据