shuiyu 发表于 2017-8-10 00:29:22

《零基础入门学习汇编语言》第四十三讲

本帖最后由 shuiyu 于 2017-8-10 00:57 编辑

越努力,越幸运。欢迎大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

唉~这几天被暑假工辞职的问题弄得焦头烂额,都静不下心来学习了。还好明天是工作最后一天了,希望有个好的结果{:5_111:} {:5_111:}

一、操作符offset
(1)操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。
(2)比如下面的程序:
   assume cs:codesg
codesg segment
   s: mov ax,bx         ;(mov ax,bx 的机器码占两个字节)
      mov si,offset s
      mov di,offset s0
      mov ax,cs:
      mov cs:,ax
s0: nop                     ;(nop的机器码占一个字节)
      nop
codesg ends
ends

(3)通俗的讲就是获取标号处的指针

二、jmp指令之段内短转移:jmp short 标号
(1)jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP;
jmp指令要给出两种信息:
转移的目的地址
转移的距离(段间转移、段内短转移,段内近转移)
       
(2)段内短转移:jmp short 标号(转到标号处执行指令)
这种格式的 jmp 指令实现的是段内短转移,它对IP的修改范围为 -128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。

(3)其实还是jmp,就是偏移的范围有一个限制而已。

三、jmp short s指令的读取和执行过程:


(1)(CS)=0BBDH,(IP)=0006,CS:IP指向EB 03(jmp short s的机器码);
(2)读取指令码EB 03进入指令缓冲器;
(3)(IP)=(IP)+所读取指令的长度=(IP)+2=0008,CS:IP指向add ax,1;
(4)CPU指行指令缓冲器中的指令EB 03;
(5)指令EB 03执行后,(IP)=000BH,CS:IP指向inc ax。

四、jmp指令之时段内近转移:jmp near ptr 标号
(1)总体基本与段内短转移相同,就是位移范围变大,变为16位的位移。
(2)16位位移=“标号”处的地址-jmp指令后的第一个字节的地址;
(3)near ptr指明此处的位移为16位位移,进行的是段内近转移;
(4)16位位移的范围为
   -32769~32767,用补码表示;
(5)16位位移由编译程序在编译时算出。

五、依据位移进行转移的jmp指令

(1)就是程序运行的具体步骤和方法方式


(2)这之中想必最困扰大家的就是ip为什么变为F6了,应该是-10啊? 在教程中小甲鱼也讲了F6是补码~且F6就是-10(一脸懵逼有没有{:5_99:} )
(3)对于补码我特意去看了小甲鱼后面补发上来的补码教程。如何得到补码?大致是这样:
0.开头的第一个字母为0就是为正数,为1就是为负数
1.首先为原码,例如为:00000011(十进制为3没毛病把)
2.取反(也就是反码),则为:11111100(用1的例子取得)
3.反码加1得到补码,则为:11111101(这个就是补码啦,为:-253)

(4)再看题中的F6为补码,表示为:11110110,减1得到反码:11110101,取反得到原码:00001010(十进制为10哟~因为前面为负数,所以最终为-10)



谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}


   
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指教,谢谢{:10_254:}

我是大神哥哥 发表于 2017-8-10 12:23:36

怪不得你这几天去那里去呢。   兼职的话,个人建议你去超市之类的。

shuiyu 发表于 2017-8-10 22:58:49

我是大神哥哥 发表于 2017-8-10 12:23
怪不得你这几天去那里去呢。   兼职的话,个人建议你去超市之类的。

我那个兼职是当打印机电脑维修售后的,是私人老板,所以不怎么好辞职{:5_104:}

shuiyu 发表于 2017-8-10 23:00:31

我是大神哥哥 发表于 2017-8-10 12:23
怪不得你这几天去那里去呢。   兼职的话,个人建议你去超市之类的。

发现你的学习进度和我一样了,你可是又复习了一遍,厉害{:5_106:}

我是大神哥哥 发表于 2017-8-11 15:12:54

shuiyu 发表于 2017-8-10 23:00
发现你的学习进度和我一样了,你可是又复习了一遍,厉害

学习进度不重要,主要是建立起一种编程思维。
页: [1]
查看完整版本: 《零基础入门学习汇编语言》第四十三讲