(1)ASCⅡ码与一般乘除与逻辑指令
标准的ASCII码共128个字符,分为二类:非打印的和可打印的ASCII码。
非打印ASCII码:这类编码用于控制性代码,共33个。如:
BEL(响铃,07H),
DEL(删除,7FH),
CR (回车,0DH),
LF (换行,0AH)等。
可打印ASCII码:共有95个。其中有:
数字0~9的编码 30H~39H
大写字母A~Z的编码 41H~5AH
小写字母a~z 的编码 61H~7AH
空格(Space)的编码 20H
8086一些要注意的指令(1)
4. NEG(Negate)求补指令
指令格式: NEG OPR ; B/W
执行的操作: (OPR)? 0 ?(OPR)
1、【例】 对AL中的数求绝对值。
ADD AL,0 ;产生SF符号位标志
JNS L1 ;非负数转到标号为L1处执行指令
NEG AL ;负数求补而成为正数
L1: ┉
2、【例】:综合运算举例。计算
(V-(X*Y+Z-540))/X
其中X、Y、Z、V均为16位带符号数,已分别装入X、Y、Z、V单元中,要求计算结果把商存入AX,余数存入DX。
第一步,完成乘法运算X*Y:
MOV AX,X
IMUL Y
第二步,保存计算结果:低位保存到CX,高位保存到BX
MOV CX,AX
MOV BX,DX
注意:乘法运算完后,结果为32位数。
第三步:完成求和运算,X*Y+Z
MOV AX,Z
CWD
ADD CX,AX
ADC BX,DX
第四步:完成X*Y+Z-540
SUB CX,540
SBB BX,0
第五步:完成 V-(X*Y+Z-540)
MOV AX,V
CWD
SUB AX,CX
SBB DX,BX
第六步:完成除法运算
IDIV X
结果:商送AX,余数送DX。
TEST的应用:该指令主要是用来测试目的操作数中,对应位是否为“1”,测试时,对应位置为1,无关位设置为0。
例: 测试BX中D8是否为0?
TEST BX,100H ;即D8位置为1,其它位为0。
结果:若ZF=1,则该位为0;若ZF=0,该位为1。
例: 测试AX中D15、D9、D7、D1、D0是否全为0?
TEST AX,8283H ;
结果:若ZF=1,则这些被测试位全为0;
若ZF=0,则这些被测试位中不全为0。
3、【例】 若要检测AL中的内容是否为负数,如果为负则转移,否则继续顺序执行,可用下列指令序列实现:
TEST AL,80H ;测D7位
JNZ NEXT ;D7=1为负则转 或者 JS NEXT
例: MOV BX,0F000H
SAL BX,1
执行指令后(BX)=0E000H,CF=1
例: MOV AX,0F000H
SAR AX,1
执行指令后(AX)=0F800H,CF=0
4、【例】编写程序段,完成下列表达式,设X、Y、Z和W均为16位符号数单元地址。
X←((Y*2)*(W/2))/(Z+X-200H) Y←余数
【参考程序】
MOV AX, Y ;把Y送AX
SAL AX, 1 ; 完成Y*2
MOV BX, W ; 把W送BX
SAR BX, 1 ; 完成W/2
IMUL BX ; 实现(Y*2)*(W/2)
MOV BX, Z
ADD BX, X
SUB BX, 200H ;实现Z+X-200H
IDIV BX ;完成除法
MOV X, AX ; 商送X单元
MOV Y, DX ; 余数送Y单元