码迷,mamicode.com
首页 > 其他好文 > 详细

汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈

时间:2014-07-02 09:26:22      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:汇编   asm   

疯狂的暑假学习之  汇编入门学习笔记 (二)


参考:《汇编语言》 王爽  第三章


一、寄存器(内存访问)


1.DS和[address]


DS 数据段寄存器,用来存放数据段地址

[address] 用来表示数据段的偏移地址


同样跟CS一样,不可以通过 mov ds, 1000 给ds赋值

要通过通用寄存器ax等。

例如:

mov ax, 1000

mov ds, ax

mov al, [0]

把1000:0的内容存进al



mov bx, 1000

mov ds, bx

mov [0], al

把al写进1000:0中


因为ax、bx、cx是16为的,内存单元是8为的,所以 mov ax, [0]会一次付给ax  [1]跟[0]中的内容

例如:

如果内存情况为

10000H 11

10001H 22

10002H 33

10003H 44

........

--------------------------------

mov ax, 1000

mov ds, ax

mov ax [0]

mov bx [2]

mov cx [1]

这上面运行后 ax=2211H 、bx=4433H、cx=3322H



mov ax,1000

mov ds, ax

mov ax, 1234

mov [0], ax

这上面运行后内存内容变为

10000H 34

10001H 12

.........


2. CPU 栈


相关寄存器:

ss: 记录栈的段地址

sp:记录栈的段地址的偏移地址

相关指令:

push 入栈  如 push ax 表示将寄存器ax的内容写入栈

pop 出栈   如 pop ax 表示从栈顶取出数据送入ax 

初始时,sp指向栈低的下一个单元的地址,每次push,sp减2,pop,sp加2


例如:

将10000H~1000FH这段内存当做栈来用

为了10000H~1000FH这段内存当做栈来用,要设置 ss=1000 sp=0010(栈底的下一个单元的地址)

如果内存内容如下:

---------------------------

10000H     

..........

1000CH 

1000DH

1000EH

1000FH

10010H   <------- sp

---------------------------

mov ax,0123

push ax

内存内容如下:

---------------------------

10000H     

..........

1000CH 

1000DH

1000EH

1000FH    23  <------- sp

10010H    01  

---------------------------


pop bx

后bx=0123H 内存内容如下:

---------------------------

10000H     

..........

1000CH 

1000DH

1000EH

1000FH

10010H   <------- sp

---------------------------


3.CPU 栈顶越界


8086CPU 保证我们对栈的操作不会越界。也就说,8086 CPU 只知道栈顶在何处,不知道栈底和栈空间的大小。





汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈,布布扣,bubuko.com

汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈

标签:汇编   asm   

原文地址:http://blog.csdn.net/billvsme/article/details/36187945

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!