1、占用一个字节的程序存储空间:这是在对微机与单片机进行汇编指令指令编程时常用的手法,例如,为了刻意使某个程序段在一个特定的地址开始,或在某个程序段中删除了一些指令而还刻意要求地址不变,基于这些的需求,通常是应用NOP指令汇编指令来充填空闲的地址;
2、产生微小延迟:这是在微机与单片机进行汇编指令指令编程时常用的手法,微机与单片机的编程并非是周期扫描的执行机制,例如,在读取某个外围通道输入值时,先发出一个请求命令,带一定延时后,再读其数值,通常是应用NOP指令来进行延时;
3、常用来做代码地址对齐:这个纯粹是对与对微机与单片机进行汇编指令指令编程来讲的。这与上述的1中占用一个字节的程序存储空间的作用相同,即汇编编译后生成机器代码的效果。
program segment
main proc far
assume cs:program
start: ;以上四句写给编译器看的!编译器用来忽悠系统的~自己理解一下就行了
;=========================================================================
push ds ;压入这个值难道想让压入程序的段基址建议压入这样写 push cs
sub ax,ax ;写成xor ax,ax可能更好一点!!!
push ax ;如果你真的是压入程序的段基址,这就应该是程序的偏移地址了,指向程序的第一条代码,
;就是push ds 了~~~~~~~~~
;以上代码猜测是由于你压入了两个值,而在程序末又始用了 ret指令
;这是call过程调用的返回指令,call指令压入栈的就是先压入cs,然后再压入ip,
;而ret指令就是先出ip后是cs的值然后指行所指示的代码段,在这里你压的ds值,后压入一个零
;所以我想你是想死死循环下去~~~但你压入ds的值在某些系统达不到此目地
;如果你不是死循环这三句代码又是什么意思呐
mov ch,4 ;有些代码的意思不是一眼就能看出结果的!要看目地是要结合上下文分析的!
;我们暂时不要猜测它的用意,一会在看
rotate: mov cl,4 ;这里楼上的都说了,没什么好讲的了~
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch ;嗯,到了这里我们才知道mov ch,4的真正用意!注意这条指令执行结果影响AF、OF、PF、SF、ZF标志位
jnz rotate ;上面我们说到ZF标志位受到dec指令的影响,也就是ch的值自减一结果为零时ZF标志位为1;
;jnz的用意:如果ch的值不为零(zf = 0)就跳到标号rotate处执行它是根据zf标志位的值来判断的!
;zf书中写到零标志,很多指令会影响它的,jz/jnz就是根据它来改变程序流的!
;前面的jl指令是小于/等于时转移,受SF和OF的影响
ret ;如果不结合程序上下文来看,很难想象这句代码的真正意思,程序中没用到call指令,而又出现了这句代码
;所以我想你想写个死循环程序
;在一些系统级编程中常用到这种方式编程
main endp
program ends
end
;好了,其它没有解译的都被楼上说了说明一下你的程序有一句错"and al,ofh"你打错了!是这样的"and al,0fh"
;还有这里只是猜测你的用意你的程序在某些环境下是死循环,在DOS中却不是死循环所以我才建议压入CS的值才能达到目地
;汇编程序的分析,不是一句一句的看就能看出意思的,要上下文一起看
;我也是新手,加我271757468一起学吧!
test属于逻辑运算指令,其功能为功能执行BIT与BIT之间的逻辑运算和测试功能(两 *** 作数作与运算,仅修改标志位,不回送结果)。
Test对两个参数(目标,源)执行AND逻辑 *** 作,并根据结果设置标志寄存器,结果本身不会保存。EST AX, BX与AND AX, BX命令有相同效果。TEST语法规格:TEST r/m,r/m/data。其影响标志包括:C,O,P,Z,S(其中C与O两个标志会被设为0)。
test的运用举例:利用Test指令测试一个位,例如寄存器:
test eax, 100b;/b后缀意为二进制/
jnz ;/如果eax右数第三个位为1,jnz将会跳转/
jnz跳转的条件非0,即ZF=0,ZF=0意味着零标志没被置位,即逻辑与结果为1。
扩展资料与汇编指令test功能相仿的还有cmp指令,CMP属于算术运算指令,其功能为功能为比较两个值(寄存器,内存,直接数值),与Test指令的测试功能相仿,其语法格式为CMP r/m,r/m/data,影响的标志位包括C,P,A,Z,O。
CMP比较(两 *** 作数作减法,仅修改标志位,不回送结果)。cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志)。零标志很像carry,也是内部标志寄存器的一位。
参考资料来源:百度百科-test(汇编指令)
参考资料来源:百度百科-CMP指令
以上就是关于汇编语言NOP指令的用法全部的内容,包括:汇编语言NOP指令的用法、帮忙解释一下汇编语言代码!、汇编指令test的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)