汇编实验
对应基础4的练习
本章题比较多
布尔计算器
创建程序,其功能为简单的32位整数布尔运算。显示菜单提示用户选择下表中的一项,然后提示输入后并把运算结果以16进制形式显示在屏幕上,菜单如下:
- x AND y
- x OR y
- NOT x
- x XOR y
- Exit
1 | INCLUDE Irvine32.inc |
消息加密
例题版
利于XOR的特性,一个数和另一个数异或后再和该数异或就能得到原本的数,对输入的字符的ASCII码与一个key异或加密,再异或一次解密,将结果输出到屏幕上
1 | ;简单对称加密,利用XOR |
修改
创建包含多个字符的密钥,使用该密钥与明文相应位进行按位异或,来对明文加密和解密,需重复使用密钥直到明文中的所有字符都转换完,假设密钥为ABXmv#7,(明文第8位与A异或)
1 | .code |
奇偶性检查
数据传输系统和文件子系统常常依靠计算数据块的奇偶性(奇偶校验)来检查错误,我们需要创建一个过程,计算整个字节数组中的所有位,如果有偶数个1,则eax需要置1,反之eax需要置0
1 | .386 |
调试查看程序结果即可
循环内的if嵌套
把下面C++的代码转成汇编代码
1 | int array[] = {1,2,3,4,5,6,7,8,9,10} |
尽量使用较少的指令数来用汇编实现,下面是我的实现:
1 | .data |
我们可以看到如果仅是判断次数的while循环(可以用for替代)LOOP就会比条件判断容易很多,但如果是条件判断,写法就要复杂一些
1 | ;不使用loop |
我们只需要在第一个while判断时使用cmp,把使用结束循环的情况跳转到结束语句或者后面的语句即可
写在后面
要加快速度了,毕竟想学的东西太多了,但还是要一点一点来学,一遍尽量学扎实
空格咋抽风了,看着贼难受