伪指令实例解析1
伪指令(pseudo instruction)是用于对汇编过程进行控制的指令,是在编译阶段发挥作用的,由汇编器(MASM、TASM等)来解释。
指令:是在执行阶段发挥作用的,由CPU执行。
1个8086CPU的寄存器均是16位的,而数据类型有以下两种:
1 Byte = 8bit 1字节
1 word = 2 Byte = 16 bit 1个字
;eg1.将字符串string中的所有数字加密。
assume cs:code,ds:data
data segment
string db '123Hello!'
data ends
code segment
start: mov ax,data
mov ds,ax ;ds和cs等段地址寄存器不支持将数据直接写入,必须通过其他寄存器中转
mov bx,offset string ;返回string的偏移地址并将其赋值给寄存器bx
;bx相当于一个变量,指向字符串(即字符数组)的首地址,故只需将bx自增1就可以访问下一个字符
x1: mov cl,ds:[bx] ;将字符串首地址中的字符的ASC码取出并赋值到寄存器cx的低位
cmp cl,'0' ;将字符串首字符的ASC码跟数字0的ASC码比较大小
jb x2 ;若前者小于后者,则说明该字符不是数字,跳到x2
cmp cl,'9' ;将字符串首字符的ASC码跟数字9的ASC码比较大小
ja x2 ;若前者大于后者,则说明该字符不是数字,跳到x2
inc cl ;若字符处于0到9之间,则对其进行加密处理,这里加密简化为将其ASC码自增1
mov [bx],cl ;将加密后的字符重新写回寄存器ds
inc bx ;将bx自增1,顺序访问下一个字符;只需自增8次即可访问完所有字符
cmp bx,9 ;判断偏移量是否超过字符串长度9
jb x1 ;若未超过,则说明未访问完所有字符,便重新进入循环体x1
x2: ;对不是数字的字符不进行任何处理
code ends
end start
截图:
总结
本来很讨厌微机原理这门课,因为好多不懂,觉得很难,想逃避。
我总是逃避,这几乎成为我的固定模式了,不管遇到什么事情都是下意识逃避。
这样太不好了,越是抗拒的东西越是会持续。我应该直面这种无力感,明白抗拒和逃避是徒劳,慢慢跳出这样的人生模式。干巴爹!!!