免费建设小说网站,英文版wordpress改中文,办公室装修设计效果,录入客户信息的软件flag 寄存器 CF:进位标志位#xff0c;产生进位CF1#xff0c;否则为0 PF:奇偶位#xff0c;如010101b#xff0c;则该数的1有3个#xff0c;则PF0,如果该数的1的个数为偶数#xff0c;则PF1。0也是偶数 ZF:在相关指令执行后#xff08;运算和逻辑指令#xff0c;传送指…flag 寄存器 CF:进位标志位产生进位CF1否则为0 PF:奇偶位如010101b则该数的1有3个则PF0,如果该数的1的个数为偶数则PF1。0也是偶数 ZF:在相关指令执行后运算和逻辑指令传送指令不影响ZF的值其结果为0则ZF1否则为0。 SF:符号标志位如果结果为负则SF1否则为0SF是对有符号运算的一种结果记录 DF:方向标志位控制每次操作之后si、di的增减。df0递增否则递减。串传送指令movsb就是根据df的值实现si和di的递增或者递减movsw是传递一个字型数据。movsb和movsw通常与rep搭配使用rep movsb就相当于
s: movsbloop srep的指令是根据cx的值重复执行串传送指令。 cld和std分别可以将df位置0和置1。 下面利用rep movsb指令将data段的第一个字符串移动到它后面的空间
assume cs:code, ds:data
data segmentdb Welcome to nasm!db 16 dup (0)
data endscode segment
start:mov ax, datamov ds, axmov si, 0 ;定义了原始地址的段地址和偏移地址mov ex, axmov di, 16 ;定义了目标地址的段地址和偏移地址mov cx, 16 ;循环16次cld ;使df0si和di递增rep movsb ;默认就是将原始地址ds:si传递到目标地址es:dicode endsend startOF:溢出标志位发生溢出OF1,否则为0。CF是针对无符号的OF是针对有符号的。
adc和sbb指令
在相加的两个数字都大于16位则需要用adc来计算。 可以看到0198h和0183h相加时低位需要进位这时低位的加法就可以用adc指令
mov ax, 0198h
mov bx, 0183h
adc al, bl
add ah, bh这样ax中存放的就是031B了。adc是用来处理有进位的加法的指令。 sbb是带借位的减法指令和adc一样是利用CF位记录的借位值或进位值。
cmp指令
cmp指令相当于减法指令但不保存结果只会影响标志寄存器的值如
cmp ax, ax则结果位0 pf1, zf1, sf0, cf0, of0 cmp指令执行后可以通过sf和of两个标志位判断其大小之所以不能单纯用sf判断是因为有可能发生溢出现象。
检测比较结果的条件转移指令
jcxz就是一个条件转移指令不过它是检测cx中的值是否为0为0就jmp下面的指令是检测标志寄存器的相关位的值如果该值满足则jmp。通常和cmp指令一同使用。这样的效果就和c语言的if语句类似。
指令含义检测的相关标志位je等于则转移zf1jne不等于则转移zf0jb低于则转移cf1jnb不低于则转移cf0ja高于则转移cf0且zf0jna不高于则转移cf1或zf1
eequal ne: not equal b: below nb: not below a: above na: not above
pushf和popf指令
pushf是将标志寄存器的值压栈popf是从栈中弹出数据送入标志寄存器中。