汇编指令分类
Posted songyaqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编指令分类相关的知识,希望对你有一定的参考价值。
汇编
汇编语言包含两种指令:
- 汇编指令
- 伪指令
伪指令
没有对应的机器指令,最终不会被CPU执行。伪指令是编译器执行的指令。
segement和ends
segement 表示一个段的开始,ends表示一个段的结束
段名 segment
段名 ends
比如:
codesg segement
codesg ends;
end
表示一个汇编程序的结束标记,编译器在编译的时候如果碰到了end,就会结束对源程序的编译
assume
假设某一段寄存器和程序中的某一个用
segment...ends
定义的段相关联。
标号
一个标号指代了一个地址,
步过循环p
遇到loop使用p来进行跳过
跳到指定的语句g ip
使用g ip跳到指定语句
start 告诉程序的入口
assume cs:code
code segment
dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
start: mov bx, 0 ; 跳过前面的数据,不加start代码会从数据处开始
mov ax, 0
mov cx, 8
s:add ax, cs:[bx]
add bx, 2
loop s
mov ax, 4c00h
int 21h
code ends
end start
汇编指令
汇编只有是有对应的机器码的指令,可以被便以为机器指令,最终为CPU所执行。
loop
assume cs:code
code segment
mov ax,2
mov cx,11
s: add ax,ax
loop s
mov ax, 4c00H
int 21H
code ends
end
loop 执行之后,寄存器cx会自动减一,直到减到0,跳出循环执行loop的下一条语句
段前缀 ds, cs, ss, es
指令mov ax, [bx]
中,内存的那元的偏移地址由bx给出,而段地址默认在ds中。我们可以在访问内存单元的指令中显式地给出内存单元的段地址所在的段寄存器。
例如
mov ax, ds:[bx]
mov ax, cx:[bx]
mov ax, ss:[bx]
mov ax, es:[bx]
mov ax, ss:[0]
mov ax, cs:[0]
[bx+idata]
表示一个内存单元,偏移地址+idata = 新的偏移地址
常用格式, 下面的写法都是将bx + 200
mov ax, [200 + bx]
mov ax, 200[bx]
mov ax, [bx].200
SI和DI
SI和DI是8086CPU中和BX功能相近的寄存器
下面3组指令实现了相同的功能
; 1
mov bx, 0
mov ax, [bx]
;2
mov si, 0
mov ax, [si]
;3
mov di, 0
mov ax, [di]
[bx + si]
和 [bx + di] 的用法一样
[bx + si]
表示一个内存单元,它的偏移地址为(bx) + (si)(即bx中的数值加上si中的数值)
常用格式
;1
mov ax, [bx + si]
;2
mov ax, [bx][si]
[bx + si + idata]和[bx + di + idata]的用法一样
[bx + si + idata]表示一个内存单元,它的偏移地址为(bx) + (si) + idata(即bx中的值加上si中的值再加上idata)
常用格式
;1
mov ax, [bx + 200 + si]
;2
mov ax, [200 + bx + si]
;3
mov ax, 200[bx][si]
;4
mov ax, [bx].200[si]
;5
mov ax, [bx][si].200
通过and和or转换大小写
转换为大写
and al, 11011111b
转换为小写
or al, 00100000b
reg表示寄存器sreg表示段寄存器
reg的集合包括:ax, bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di
sreg的集合包括:ds, ss, cs, es
‘
以上是关于汇编指令分类的主要内容,如果未能解决你的问题,请参考以下文章