想念wangfeng老师,他将深奥的汇编语言解析的是那么透彻明白,身为学生的我真的受益良多。
字符 十六进制ASCII
0~9 30h-39h
A~Z 41h-5ah
a~z 61h-7ah
逻辑运算:
与 AND &
或 OR |
非 NOT !
异或 XOR
and 操作符 &
i = 0 & 1 ;// i is 0
i = 1 & 1 ;// i is 1
i = 0 & 0 ;// 0
i = 1 & 0 ;// 0
or 操作符 |
i = 0 | 1 ;// i is 1
i = 1 | 1 ;// i is 1
i = 0 | 0 ;// 0
i = 1 | 0 ;// 1
xor 异或操作符(相等取0,不等取1)
0 xor 1 ; 1
1 xor 1 ; 0
0 xor 0 ; 0
1 xor 0 ; 1
与&操作,用0与数字是取0
或|操作, 用1或数字是取1
XOR, 异或相等取0,不等取1 。例如XOR AX,AX ;将AX置零
Assembly中的逻辑运算指令:
AND
OR
XOR
TEST
NOT
还有移位
SHL......
WF老师说计算机最擅长的是逻辑运算!
原码,补码,反码。
计算机中用补码表示数。
===================================================================================================================================
问题1:10/2今天一个人问我,定义一个变量要给它分配内存,如果一个数直接就用了,那是不是也要给他分配内存,这个数放到哪儿去了?
我听了之后感觉确实,没仔细想过,这倒是让我想起了assembly汇编里面的立即数寻址。MOV AX,0AH
比如java中:
int a = 10;
int b = a / 5;
System.out.println(b);
我用C语言做了个例子,然后设置了一个断点,进入调试查看到汇编如下:
83: int a = 10;
00401288 mov dword ptr [ebp-4],0Ah
84: int b = a/5;
0040128F mov eax,dword ptr [ebp-4]
00401292 cdq
00401293 mov ecx,5 ;5这个数被放进cpu里面的寄存器ecx里面了
00401298 idiv eax,ecx
0040129A mov dword ptr [ebp-8],eax
85: printf("%d",b);
当然java虚拟机里面的情况我就不太清楚了。
上面出现了一个CDQ指令,该指令的意义:CDQ 是一个让很多初学者感到困惑的指令. 它大多出现在除法运算之前. 它实际的作用只是把EDX的所有位都设成EAX最高位的值. 也就是说,当EAX <80000000, EDX 00000000; 当EAX >= 80000000, EDX 则为FFFFFFFF).
===================================================================================================================================
高级语言中的位运算:
Java:
Java 位运算符 (bitwise operators )
Java 定义的位运算直接对整数类型的位进行操作,这些整数类型包括long,int,hort,char,and byte 。表4-2 列出了位运算:
运算符 | 结果 | 元运算 |
~ | 按位取反NOT | 1 |
& | 按位与(AND) | 2 |
| | 按位或(OR) | 2 |
^ | 按位异或(XOR) | 2 |
>> | 右移 | 2 |
>>> | 右移,左边空出的位以0填充 ;无符号右移 | 2 |
<< | 左移 | 2 |
&= | 按位与赋值 | 2 |
|= | 按位或赋值 | 2 |
^= | 按位异或赋值 | 2 |
>>= | 右移赋值 | 2 |
>>>= | 右移赋值,左边空出的位以0填充 ;无符号左移 | 2 |
<<= | 左移赋值 | 2 |
【2022.05.08】之前有一个aogosoft汇编小站,经常去看一看,但是后来去看,发现关闭了。还有一个叫罗聪的程序员自己建了个网站,不过是讲自己的学习经历和经验的,首页一个人对着电脑,不过那个人的头是个牛头,这是说这个人是个大牛吧,哈哈哈。 在之前还有一个xieebajinzhi的,后来好像也关闭了。记得后来遇见一本非常好的windows汇编的书,作者是罗云彬,自己后来买了第四版,真的非常给力,在windows环境下,通过汇编调用windows的api进行编程,配合推荐的ide做软件很给力,而且性能优秀,当时在aogosoft汇编小站看到一个人用windows平台汇编实现了俄罗斯方块,代码只有93kb,逆天啊,佩服,佩服!当时还经常去看雪论坛,一个很有名的网站,每年出一个精华辑,那些过去的时光,还挺美好,现在已经在用linux平台了……