1
jz zero
jl nega
mov al,1
jmp ok
zero:
xor al, al
jmp ok
NEGA: MOV al, 0ffh
| mov al, 60h cmp al, 0bbh jb l2 l1: mov al, 0bbh l2: NOP |
分析: 1 jb因此是无符号数 2 60<bb 因此,成立 3 al最后为60h |
| mov al, 60h cmp al, 0bbh JL l2 l1: mov al, 0bbh l2: NOP |
有符号数 60正数大于负数bbh,因此不满足条件 al结果为bbh |
| xor al, al mov bl, 98h add bl, 88h jnc L2 L1: INC AL; L2: NOP |
jnc判断有没有进位,无进位跳转, 这里有进位,因此不转。al=01 |
| xor al, al mov bl, 98h add bl, 88h jnc L2 L1: INC AL; L2: NOP |
判断有没有溢出,明显有。 故同样不转。 |
| mov al,1 mov bl, 72h add bl, 40h jc L2 L1: xor al, al L2: nop |
判断进位,没有,不转,=0 |
| mov al,1 mov bl, 72h add bl, 40h jo L2 L1: xor al, al L2: nop |
72+40H 有溢出?这个时候,要把两个数 当做有符号数来看待。一个字节的最大有符号值时127,因此溢出了。结果=0 |
| mov bl, 46h test bl, 01h jz l2 |
test 是看看最低位是否为0,这里6=0110并不是1,因此jz不跳转。al被L1清空=0 |
| mov bl, 46h test bl, 0FFh jNP l2 |
test是与and一致的操作,只是同cmp一样不影响目的操作数,只影响标志寄存器FLAGS。 JP和JNP是判断1的个数是否是偶数。这里怎么判断呢?其实就是看多少个1,这里46=01000110,3个1,奇数,因此JNP转,就会让al=1了 |
2
mov al,x
cmp al,0
jz zero
jl nega
mov al,1
jmp ok
zero:
xor al, al
jmp ok
NEGA: MOV al, 0ffh
3 找三者得最大值:1240h(有符号数,9cc0h为负数)
4 把三个连续存放的单字节无符号数按递增次序重新存放在原存储位置
分析:
1 定义三个连续存放的单字节db数
2 从第一个开始与第二个比较,如果

这篇博客探讨了在汇编语言中如何处理5字节无符号数的表示,涉及存储和进位问题。通过使用EAX和EDX寄存器存储高低四位,讨论了数据导入和可能的溢出情况。文章还介绍了如何用AL寄存器接收键盘输入,并设计了一个简单的判断流程,根据输入的字符(a, b, c)进行不同操作,未满足条件时重新获取输入。"
44724255,4891219,使用vim编译C++:环境配置与快捷操作,"['vim编辑器', 'C++编程', '环境变量配置', 'MinGW', '代码编辑']
最低0.47元/天 解锁文章
6579

被折叠的 条评论
为什么被折叠?



