伪指令
segment和ends是一对成对使用的伪指令,其定义一个段,segment指明了段的开头,ends指明了段的结束。
段名 segment
...
段名 ends
code segment ;定义一个段,段名为“code”,这个段从这里开始
...
code ends ;“code”段到这里结束
assume伪指令:用于向汇编程序说明定义的段与某一个段寄存器关联起来,
code segment
assume cs:code
...
code ends
指令
call指令:用于调用其他函数。
call delay ;调用延迟函数
dec指令:减1指令,该指令使操作数的内容减1,然后再送回该操作数。
dec bx ;减1指令,即让bx中的内容减1
push指令:用于将一个子单元压入栈中。
push dx ;将 dx 数据压入栈中
pop指令:用于将堆栈段中的一个字单元弹出。
pop dx ;将堆栈段中的字单元 ax 弹出
延迟函数
proc、endp :成对出现,分别表示子程序定义的开始和结束
delay proc near ;定义延时程序 delay
mov bx,8 ;将数据 8 送到 bx 基址寄存器
lll: mov cx,0 ;将 cx 计数寄存器设置为 0,并设计标注处 lll
ll: loop ll ;跳转至 ll 处执行程序,并设计标注处 ll
dec bx ;减 1 指令,即让 bx 中的内容减1
jne lll ;条件转移指令即ZF=0,转至标号处 lll 执行
ret ;栈顶字单元出栈,其值赋给IP寄存器。即实现了一个程序的转移,将栈顶字单元保存的偏移地址作为下一条指令的偏移地址。
delay endp ;proc、endp 成对出现,分别表示子程序定义的开始和结束
loop指令:与cx搭配使用,当cx不等于0时循环
;延迟函数中的例子
ll: loop ll ;跳转至 ll 处执行程序,并设计标注处 ll
;loop指令是当cx不等于0时循环,且每次cx-1,loop ll它指向的地仍然是这句指令的地址,cx减去1,那么cx=-1,在cpu指令集当中用补码
表示整数,所以这里第一次会变成-1也就是FFFFh,然后它一直循环减一,直到为0。那么这是内部循环,它的外部循环是8次,所以是
8*FFFFh = 8*65535