标签:访问 跳出循环 数值 单元 xid lock 定义 block class
汇编语言包含两种指令:
没有对应的机器指令,最终不会被CPU执行。伪指令是编译器执行的指令。
segement 表示一个段的开始,ends表示一个段的结束
段名 segment
段名 ends
比如:
codesg segement
codesg ends;
表示一个汇编程序的结束标记,编译器在编译的时候如果碰到了end,就会结束对源程序的编译
假设某一段寄存器和程序中的某一个用
segment...ends
定义的段相关联。
一个标号指代了一个地址,
遇到loop使用p来进行跳过
使用g ip跳到指定语句
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所执行。
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的下一条语句
指令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]
表示一个内存单元,偏移地址+idata = 新的偏移地址
常用格式, 下面的写法都是将bx + 200
mov ax, [200 + bx]
mov ax, 200[bx]
mov ax, [bx].200
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) + (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 al, 11011111b
转换为小写
or al, 00100000b
reg的集合包括:ax, bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di
sreg的集合包括:ds, ss, cs, es
‘
标签:访问 跳出循环 数值 单元 xid lock 定义 block class
原文地址:https://www.cnblogs.com/songyaqi/p/11888051.html