(二)常用指令简单介绍

1、内存中字的存储

CPU 中,用 16 位寄存器来存储一个字,高 8 位放在高位字节,低 8 位放在低字节。比如我们从 0 地址开始存放 20000,如下图所示,在图中用 01 两个内存单元来存储 20000(4E20H)01 这两个单元可以看做一个起始地址为 0 的字单元,则数据 4E20H 的低位字节放在 0 号单元中,高位字节存放在 1 号单元中。

2、mov、add、sub 指令

mov 指令有以下几种形式

mov 寄存器,数据                  如:mov ax,6
mov 寄存器,寄存器                 如:mov ax,bx
mov 寄存器,内存单元               如:mov ax,[0]
mov 内存单元,寄存器               如:mov [0],ax
mov 段寄存器,寄存器               如:mov ds,ax
注:mov 内存单元,内存单元          如:mov [0],[1]   这是错误的写法,mov 指令不能用内存地址直接对内存地址赋值

3、栈

栈是一种具有特殊的访问方式的存储空间,遵循后进先出的规则。8086 CPUSS:SP 指示栈顶的位置,并提供 pushpop 指令实现压栈和出栈。
pushpop 指令有以下几种形式

push 寄存器     push ax         将寄存器 ax 的数据压入栈中
pop 寄存器      pop ax          从栈顶取出数据送入 ax
注:8086 CPU 的压栈和出栈操作都是以字节为单位进行的。

4、loop 指令

英文单词 loop 有循环的意义,显然这个指令和循环有关。
loop 指令格式:loop 标号CPU 执行 loop 指令的时候,要进行两部操作

1. sub cx,1H     先将 cx 减一
2. 判断 cx 中的值,不为零则跳转至标号处执行程序,为零则向下执行。
例:add ax,ax 需要重复执行 10 次
mov cx,10
s:  add ax,ax
loop s

5、mul、div 指令

mul 乘法指令
(1)两个相乘的数要么都是 8 位,要么都是 16 位;如果是 8 位,一个存放在 al 中,另一个存放在 8 位的寄存器或者内存字节单元中;如果是 16 位,一个默认值 ax 中,另一个放在 16 位寄存器或内存单元字中。
(2)结果:如果是 8 位乘法,结果默认放在 ax 中;如果是 16 位乘法,结果高位默认在 dx 中,地位在 ax 中。

指令格式:mul 寄存器      如:mul ax
mul 内存单元     如:mul byte ptr ds:[0]

div 除法指令
(1)除数:有 8 位和 16 位两种,在一个寄存器或内存单元中;
(2)被除数:默认放在 axdxax 中,如果除数为 8 位,则被除数为 16 位,默认存放在 ax 中,如果除数为 16 位,被除数则为 32 位, dx 存放高 16 位, ax 存放低 16 位。
(3)结果:如果除数为 8 位,则 al 存储除法操作的商, ah 存储除法操作的余数,如果除数为 16 位,则 ax 存储除法操作的商, dx 存储除法操作的余数。

指令格式:div 寄存器      如:div ax
div 内存单元     如:div word ptr ds:[0]

6、伪指令db、dw、dd、dup

db = define byte  定义数据宽度为一个字节
dw = define word  定义数据宽度为一个字
dd = define duble word  定义数据宽度为两个字

dup 是一个操作符,它是配合 db dw dd 等数据伪指令一起使用的,用来数据的重复。

指令格式:db 重复次数 dup(重复的字节型数据)
指令格式:dw 重复次数 dup(重复的字型数据)
指令格式:dd 重复次数 dup(重复的双字型数据)
db 3 dup(0,1,2)
定义了 `9` 个字节,相当于 `db 0,1,2,0,1,2,0,1,2`

7、offset 操作符

操作符 offset 在汇编语言中是由编译器处理的符号,它的功能就是取得标号的偏移地址,比如下面的程序

assume cs:code
codesg segment
start: mov ax,offset start      ;相当于 mov ax,0
s: mov ax,offset s      ;相当于 mov ax,3
codesg ends
end start

在上面的程序中,offset 操作符取得了标号 starts 的偏移地址 03,因为第一条指令的长度为 3 个字节,则 s 的偏移地址为 3

8、转移指令

可以修改 IP 或者同时修改 CSIP 的指令统称为转移指令,概括的讲,转移指令就是可以控制 CPU 执行内存中某处代码的指令。

8086 CPU 的转移行为有以下几类
* 只修改 IP 时,称为段内转移,比如:jmp ax
* 同时修改 CS 和 IP 时,称为段间转移,比如:jmp 1000:10
由于转移指令对 IP 的修改范围不同,段内转移又分为以下两种情况
* 短转移 IP 的修改范围为 -128~127
* 近转移 IP 的修改范围为 -32768~32767
8086 CPU 的转移指令有以下几类
* 无条件转移指令,如:jmp
* 条件转移指令,如:jz
* 过程
* 中断

jmp 指令格式

jmp short 标号     实现段内短转移
jmp near ptr 标号  实现段内近转移
jmp far ptr 标号   实现段间转移,又称为远转移
jmp word ptr 内存单元地址(段内转移)
jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处放着两个字,高地址处的字是转移的目的段地址,低地址处是转移目的偏移地址。

8、call 和 ret 指令

ret 指令用栈中的数据,修改 IP 的内容,从而实现近转移;
retf 指令用栈中的数据,修改 CSIP 的内容,从而实现远转移;

CPU 执行 ret 指令时,进行下面 2 步操作
1、(IP) = ((ss)* 16 + (sp))
2、(sp) = (sp) + 2   相当于 pop ip
CPU 执行 retf 指令时,进行下面 4 步操作
1、(IP) = ((ss)* 16 + (sp))
2、(sp) = (sp) + 2   相当于 pop ip
3、(CS) = ((ss)* 16 + (sp))
4、(sp) = (sp) + 2   相当于 pop cs

call 不能实现短转移,除此之外,call 指令实现转移的方法和 jmp 指令的原理相同,主要进行两个步骤

1、将当前的 `IP` 或 `CS` 和 `IP` 压入栈中
2、转移

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 36,351评论 8 113
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,341评论 0 1
  • 计算机通过执行指令序列来使机器得以工作,所以对于每一系列的计算机都有指定的一组指令集供计算机使用,这组指令...
    未来科技工作室阅读 7,467评论 1 10
  • 躺在床上做梦,梦见左手的地方长出藤芽,黑色的线条一点点扩开,昆虫被气味吸引过来,被吃掉
    U0阅读 208评论 0 1
  • 由内心而发的人,才能让我们走得远,才不会因为受外界的因素而影响。
    福海蓝阅读 122评论 0 1