jmp 2AE3:3;CS=2AE3H,IP=0003H
jmp ax;只能用某一合法寄存器的值来修改IP的值
地址寄存器不能用立即数mov,而是得通过合法的寄存器来mov
;将(1000:0)中的数据读到al中
mov bx,1000H
mov ds,bx
mov al,[0];0是ds偏移量为0处的数据地址
注意操作ax用mov时,地址的进入低八位 ,地址加一进入高八位
8086的入栈和出栈都是以字为单位
push和pop后接寄存器,不能是立即数。栈顶指针是用SS:SP来描述
8086没有预防超栈的机制
push时sp-2,数据进去;pop时sp+2,数据出去。空栈时,sp指向0(因为sp在剩下最后一个元素的时候,为FFFEH,pop后减2变成0)
inc bx;使bx自增1
loop循环,计算2的11次方,利用cx寄存器。到loop时,cx减一,若不为零则回到s处进行循环
mov ax,2
mov cx,11
s:add ax,ax
loop s
可以将ah赋0,al赋地址上的数,就可以把一个8位的数赋到ds(16位)上了。bx用作偏移地址变化
mov ax,ds:[bx]
dw即define word
通过and和or对寄存器的某一位进行设0或设1.
stdcall 是 StandardCall 的缩写,是C++的标准调用方式。
.model flat,stdcall 程序工作模式,
flat为Windows程序使用的模式(代码和数据使用同一个4GB段),
stdcall为API调用时右边的参数先入栈
DOSSEG排列段次序
Orders the segments according to the MS-DOS segment convention: CODE first, then segments not in DGROUP, and then segments in DGROUP. (32-bit MASM only.)
lea对变量没有影响是取地址,对寄存器来说加[]时取值,第二操作数不加[]非法
mov对变量来说没有影响是取值,对寄存器来说是加[]时取地址,第二操作数不加[]是取值
将ASCII的小写字母转化为大写字母,只要将第六位的1置0就好了,用1101_1111B去and就好了
定义string尽量用db
奇数放高位,偶数放低位
div指令下,8位,AL存商,AH存余数;16位,AX存商,DX存余数
DUP:duplicate
mov ax,offset s
adblock可以自定义过滤选项
jcxz 标号(若cx等于0,转到标号处执行,否则什么都不做,程序继续往下执行)
所有循环指令都是短转移
奇偶性(parity)。奇偶校验标志位:PF。8086是看是否有偶数个1
adc ax,1相当于ax=ax+1+CF
sbb是带借位的减法
cmp 对象1,对象2,相当于减法,只不过计算结果不在ax中保存,只影响FLAGS
考察正负的时候要考虑sf和of
je,jne,jb,jnb,ja,jna
equal,below,above
df决定了si和di的改变方向。用指令cld清0,std置1
pushf和popf是将标志寄存器的值入栈和出栈
中断类型码-中断向量表-中断表项(高地址放段空间,低地址放偏移地址)
端口读写用in out
内中断过程:
1.取中断类型码n
2.标志寄存器入栈,IF=0,TF=0
3.CS,IP入栈
4.IP=(n*4) CS=(n*4+2)
而可屏蔽中断在IF=0时被禁止
sti 设置IF=1
rti IF清零
按下按键产生的扫描码称为通码,松开是断码。断码=通码+80h
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
最近在做程序的时候,突然发现对于NSString的理解还是存在问题的。因此补充一片blog,希望对刚刚进入OC开发并搞不清楚内存泄露问题的人一点指引。 赋值: NSString * str = @”123″; // 这段代码的含义其实就是附一个常量给str,该…