汇编学习笔记(六)
第三章:寄存器(内存访问)
问题:
call指令将 IP 保存在内存的哪里?ret可以拿回
一个字型数据存放在内存中可以由 2个连续的的内存单元组成
- 高地址 单元存放 字型数据的 高位字节
- 低地址 单元存放 字型数据的 低位字节
ds 一般用于数据访问,所以搞波实验,(学习进度就是这样降下来的)
实验一:
mov al, [0] mov ax, [0] mov al, [1] mov ax, [1] mov [0], ah mov [0], al
[0]的段地址存储在ds中
[xxxx]为偏移地址
需要配合 -d指令查看指定内存
实验二:
mov ax, 1000H mov ds, ax mov bl, [0] mov bh, [2] mov ax, bx mov [0], ax
通过 mov 指令 来修改 ds 中的段地址
这次实验比较失败,但是的确发现数据改变,
由于1000:0000~000f 中都是 00,所以我只能发现ax的发生变化
实验目的还是达到了
实验三:
mov ax, 0102H mov bx, 0304H mov cx, 1000H mov ds, cx mov [0], al mov [1], ah mov [2], bx add dx, [0] add dx, [1] add dx, [2] add dx, [3] mov dx, 0 add dl, [0] add dl, [2] add dh, [1] add dh, [3] sub dh, dl
显然汇编代码不太好写我写错了四五次,最终还是看到了想要的结果,
偏移地址是依靠寄存器的位数来判断传输的是 字节 还是 字
编程的时候尤其要注意这一点
实验小结:数据长度需要特别特别特别注意
字节数据在 内存中存放 1 为 01
字型数据在 内存中存放 1 为 01 00
可以通过 mov [0], cs 将cs保存起来……又想到了栈和递归的现场保存
未完续待……
大道五十,天衍四九,人遁其一!