and和or指令
- and指令:逻辑与指令,按位进行与计算。
mov al,01100011B
and al,00111011B
执行后的结果:
(al) = 00100011B
- or指令:逻辑或指令,按位进行或运算。
mov al,01100011B
or al,00111011B
执行后结果:
(al) = 01111011B
ASCII码
我们可以在汇编程序中,用'...'的方式指明数据是以字符的形式给出的,编译器将会把它们转化为相对应的ASCII码。
data segment
db 'unIX'
data ends
程序解析:
db 'unIX'相当于db 75H,6EH,49H,58H
unIX占4*8位,4个字节,2个存储单元。
SI和DI
SI和DI是8086CPU内和bx功能相近的寄存器
SI和DI不能分成两个8位寄存器来使用。
mov si,0
mov ax,[si] ;(ax) = 0
mov ax,[si+123] ;(ax) = 123
[bx+si+idata]和[bx+di+idata]
mov ax,[bx+si+idata]
含义:将一个字单元的内容送入ax,段地址在ds中,偏移地址为bx中的值加上si中的值再加上idata。
数学化描述:(ax) = ((ds)*16+(bx)+(si)+idata)
- 该指令的其他常用格式:
mov ax,[bx+200+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
嵌套循环
- 把循环次数放到内存中
code segment
st: mov cx,4
s0: mov ds:[40H],cx ;把外循环的循环次数存进内存中
...
...
mov cx,8 ;设置内循环的次数为8
s: ...
...
loop s ;内循环
mov cx,ds:[40H] ;把外循环次数从内存中取出
loop s0 ;外循环
code ends
end st
- 把循环次数放到栈中
stacksg segment
dw 0,0,0,0 ;开辟足够的内存空间作为栈空间
stacksg ends
code segment
st: mov ax,stacksg ;设置栈顶
mov ss,ax
mov sp,8
...
mov cx,4
s0: push cx ;把外循环的循环次数压进栈中
...
...
mov cx,8 ;设置内循环的次数为8
s: ...
...
loop s ;内循环
pop cx ;把外循环次数从栈中取出
loop s0 ;外循环
code ends
end st