Open CelestialCosmic opened 2 years ago
2022/3/9(咕咕咕...咕咕咕咕咕......)
ax:数据 bx:数据、偏移地址 cx:循环计数器 dx:累加器
inc 等价于高级编程语言中的 +=/++,也就是自增。
loop 等价于高级编程语言中的 for,也就是循环。
类似于高级编程语言,需要自定义循环的代码段才能使用。
mov cx 50 a: add ax,ax loop a
上面的代码就是 n+n 循环 50 次
循环中,cx 的内容是递减的。因为 cx 寄存器的作用就是在 loop 中充当计数器的作用。
and 与 or 指令。
指令需要一个寄存器和一个二进制数据
形如and al,11001011B
and al,11001011B
比较完成的结果会直接覆盖到寄存器中
例如 ascII 编码中,通过异或比较编码中的内容来判断字母的大小写。
mov al,20H ;这里将 al 赋值为了 A or al,00100000B ;这里将 al 转换为了 a and al,11011111B ;这里将 al 转换为了 A
dw + 8 个数据可以规定一片内存地址,存放 8 个字单元
db 类似于 dw,不过存储的是 8 个双字节单元。
但是定义后,其数据可能在编译过程中被覆盖,可以使用 jmp 指令或者定义多个段解决
如下两个例子:
assume cs:code,ds:data data segment data ends code segment code ends
[x + bx],x[bx],[bx].x均可以表示地址:(bx) * 16 + x,也就是以(bx)为段地址,x 为偏移地址。
[x + bx]
x[bx]
[bx].x
CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器;
在 assume 中指定段以使用该部分的代码。
2022/3/9(咕咕咕...咕咕咕咕咕......)
寄存器各自的功能
ax:数据 bx:数据、偏移地址 cx:循环计数器 dx:累加器
inc
inc 等价于高级编程语言中的 +=/++,也就是自增。
loop
loop 等价于高级编程语言中的 for,也就是循环。
类似于高级编程语言,需要自定义循环的代码段才能使用。
上面的代码就是 n+n 循环 50 次
循环中,cx 的内容是递减的。因为 cx 寄存器的作用就是在 loop 中充当计数器的作用。
段前缀
异或操作
and 与 or 指令。
指令需要一个寄存器和一个二进制数据
形如
and al,11001011B
比较完成的结果会直接覆盖到寄存器中
例如 ascII 编码中,通过异或比较编码中的内容来判断字母的大小写。
自定义数据
dw + 8 个数据可以规定一片内存地址,存放 8 个字单元
db 类似于 dw,不过存储的是 8 个双字节单元。
但是定义后,其数据可能在编译过程中被覆盖,可以使用 jmp 指令或者定义多个段解决
如下两个例子:
多样的内存表示方式
[x + bx]
,x[bx]
,[bx].x
均可以表示地址:(bx) * 16 + x,也就是以(bx)为段地址,x 为偏移地址。自定义程序(二)
CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器;
在 assume 中指定段以使用该部分的代码。