通用启动模版
1 | DATA SEGMENT |
判断一个数的正负
使用指令TEST
TEST功能简介:将两个操作数进行逻辑与运算,并根据运算结果设置相关的标志位。但是,Test命令的两个操作数不会被改变。运算结果在设置过相关标记位后会被丢弃。
作用详细说明
将两个操作数进行按位AND,设结果是TEMP
- SF = 将结果的最高位赋给SF标志位,例如结果最高位是1,SF就是1
- 看TEMP是不是0,如果TEMP是0,ZF位置1;如果TEMP不是0,ZF位置0
指令书写
1 | TEST AL 80H |
解释:
根据补码表示,最高位是符号位,如果符号位是1,那么这个数就是负数。所以选择十六进制中8(二进制表示1000H)作为测试数据。如果寄存器中数据第一位不是1,那么SF=0,ZF = 1。反之SF=1,ZF = 0
上面这个例子体现的是TEST可以比较指定位(设置测试数据中指定位为1),但只能测试1位,多位目前没碰到
举例:
求一个数的相反数
所用指令:NEG
指令语句:
1 | NEG AX |
高精度数的运算
所用指令:ADD,ADC;SUB, SBB
总结
- 用DX、AX表示双精度数
- 低位用AX,高位用DX
- 先用非进位运算低位,再用进位运算高位
举例
题1:高精度加减
1 | MOV AX,X ;用DX,AX来表示双精度数 |
题2:高精度取反
1 | NEG AX ; Negate AX if negative |
注:最后一行很关键,因为取反的本质是用0减,所以存在借位,高精度计算就需要考虑这点
寻址
寻址没有什么特别的脚本,但是有一点需要注意
内存与[内存]没有区别
寄存器与[寄存器]有区别
寄存器表示取的是寄存器的地址值
[寄存器]表示取的是寄存器里面的值