您的位置 首页 传感器

第9章 内存操作(X86汇编教程)

这一章将讲解汇编对内存的操作我之前说过,内存操作需要2个地址段地址和偏移地址段地址一般放在段寄存器里,在186里面,以S结尾的寄存

这一章将解说汇编对内存的操作.我之前说过,内存操作需求2个地址.段地址和偏移地址.段地址一般放在段寄存器里,在186里边,以S结束的寄存器就叫段寄存器(0_0!请不要急着写代码测验…),但不是每个段寄存器都能随意改的.为什么呢?我说过:代码也是在内存里的,也便是说,需求一个段寄存器 和一个偏移寄存器来指向咱们的代码,还有栈(不是本章内容),那也是一个内存地址,也需求段寄存器和一个偏移寄存器.(我可没说偏移地址放在偏移寄存器里,实际上咱们操作内存很少用到偏移寄存器!)

代码地址的段寄存器为CS,偏移寄存器为IP

栈,段寄存器:SS,偏移寄存器:SP

恩,也便是说,CS和SS这2个段寄存器不能随意改.

好了,接着说怎么往段寄存器里写入段地址了.提到这儿不得不说CPU的一些蛋疼的当地了.暂时先说2处:

1:一般的数据操作指令,需求2个寄存器操作数的时分,不能放2个位数不同的寄存器.比方下边的代码是行不通的:

MOV AX,BL

2:X86有一个缺点:不能直接MOV 段寄存器,数字,需求拿其它寄存器做中转

这样是不对的:

MOV DS,1800H;X

要这样:

MOV AX,1800H

MOV DS,AX;√

这样才能把1800H写入到DS寄存器里

好了,段地址说完了,说偏移地址,这个偏移地址,载体比较多.能用部分寄存器或用直接数(便是直接上数字).

还记得内存地址算法吗?没错,便是把段地址乘以16(这儿的16是10进制的哟!),加上偏移地址!

在NASM汇编中,操作数为内存值的时分,用这种方法表明(把某数值写入内存的语法↓):

MOV 要操作的数值类型 [段地址:偏移地址],数值

实例:

MOV BYTE

可见,在汇编中,用方括号表明这个操作数是内存某地址,方括号里表明地址.在指令后边,用英文单词表明要操作的数据类型.避免移动剩余数据到内存里.

类型:

BYTE:字节形

WORD:字形

DWORD:双字型(186用不着,由于没这么长的寄存器)

好了,试试看吧,咱们往12345H地址写个数字进去看看:

MOV AX,1234H

MOV DS,AX

MOV BX,0005H

MOV BYTE [DS:BX],00H

编译履行看看.

作业:把内存0000H~0004H处悉数写入00H

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/317277.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部