(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单元
posted @ 2011-06-28 19:05  gxldan  阅读(631)  评论(0编辑  收藏  举报