汇编笔记二

汇编笔记二

汇编笔记一

内存访问

关于计算机内存访问,不能不说到计算机的内存分段,分页(学了操作系统的小伙伴应该都知道)。计算机的内存寻址和访问都要通过段表和页表的转换,将逻辑地址转换成物理地址,再进行磁盘读写,它的一个重要的转换原则就是“段基址*16+偏移地址=目的地址”。

在计算机中,内存被分为四个区,代码区,数据区,堆区,栈区。各自的作用就不细说。在汇编语言中,区又可以被称为段,前面讲寄存器的时候讲到了它有段寄存器,它用于段基址的存储,指针寄存器则用于偏移地址的存储,计算机利用上面的转换原则和两类寄存器对内存进行访问。

#小例子,汇编语言的内存访问
mov ax,0000;
mov ds,ax;
mov [1],ax;
#表示将ds(内存基址)设置为0000,并将0000送到00001-00002处,ax为16位寄存器,而一个内存单元为1byte(8位)
#[adderss]表示以ds为段基址,第address个内存单元的位置

内存寻址访问(分享转载)

字和字节

在计算机中,数据的大小用字(word)和字节(byte )来表示,分别表示16位(在16位环境下)和8位数据,在汇编语言定义数据时,通常用db,dw,dd来分别表示定义了8位,16位,32位的数据。
来自汇编语言第三版 王爽

代码段

对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将长度为N(N≤64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,我们可以认为,这段内存是用来存放代码的,从而定义了一个代码段。
比如下例:

mov ax,0000
add ax,0123H
mov bx,ax
jmp bx

这样就定义了一个代码段。
来自汇编语言第三版 王爽
cs:ip即刚刚说的段基址:偏移地址的内存访问方法。

栈段

栈是一种广泛应用的数据结构
来自汇编语言第三版 王爽

来自汇编语言第三版 王爽
栈段的基址寄存器是ss寄存器,指针寄存器是sp。
通常用的指令有pop和push,分别代表出栈和入栈。

#小例子,对栈里的数据进行操作
mov ax,1000H
mov ss,ax   #设置栈段地址,它不能直接传入数据,所以用ax寄存器做中转
mov sp,0010H    #设置栈顶的偏移地址,在栈为空时,栈指针指向栈底下一个内存单元
#下面这一段程序实现ax寄存器和bx寄存器内容的交换
push ax  #压入ax
push bx  #压入bx
pop ax	#弹出栈顶,即bx的数据到ax中
pop bx	#同上

小结

计算机通过一系列相关的机制来进行对内存的访问,让我们稍稍理解了计算机的基操原理(读写访问)。汇编语言相比以往的高级语言带给我们的是更接近底层的编程体验,能直接对机器进行操作(真正cpu运行还是要编译成二进制代码,这里只是说能操纵寄存器等底层物件)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值