SCAU 汇编语言第一,二章复习

第一章

进制转换:十六进制的一位对应四位二进制,八进制一位对应3位2进制,十进制转二进制就除以2再将余数倒过来排列就行,其他也是一样。
补码:负数将原本正数的补码所有位置取反并且在末尾加一,正数是它本身。
反码:正数一样是自己,负数的话就是补码减一。

注意:例如八位二进制,其原码表示范围是-127~ +127, 但其补码表示范围为-128~+127,这是因为补码中没有+0和-0之区分,原本10000000为-0,我们将1000 0000规定为-128,这样就可以让有符号数多一个有用的数据点。这个值不能用普通的取反加1来计算。

补码的加减法:
[X]补 求补→[-X]补 求补→ [X]补,即一个数字求补两次后会回到其本身

加法:[x+y]补=[x]补+[y]补
减法:[x-y]补=[x]补+[-y]补

第二章

1,8086寄存器组:
通用寄存器:ax,bx,cx,dx,bp,si,di等
ax:当累加器用,而且在乘除运算中都作为默认的寄存器。
bx:可用来做基址寄存器。
cx:一般用来做计数器,比如在loop循环中为循环的次数
DX:有时候会与AX一起使用,用来保存乘积高位或者除法的余数,而且DX还可以用来保存I/O的端口地址。

以上的寄存器都为16位寄存器,并且它们可以拆分位两个八位寄存器来分开使用,例如ax可以拆分位ah(高位)和al (低位)。

sp:又称作堆栈指针寄存器,一般用来表示栈顶的偏移地址。
bp:又称作基址寄存器,用来寻址时使用,且其默认的段为ss而并非ds。
si:源变址寄存器,寻址时默认段为ds
di:目的变址寄存器,寻址时默认段为ds。

以上的四个寄存器也为16位寄存器,但是它们不能拆为两个八位寄存器来使用。

专用寄存器:
ip,cs,flags等
ip:用来存放当前指令的偏移量
cs:用来存放当前指令的段地址。
flasgs:标志寄存器,或者叫做psw,用来存放条件码标志,例如溢出,进位等。

段寄存器:如cs(代码段),ds(数据段),ss(堆栈段),es(附加段)。

存储器:
在计算机中,以字节为单位进行存储数据和编码,而每一个字节单元有一个唯一的物理地址,地址从0开始编号,以此类推。
故十六位二进制数可以表示2的十六次方个字节单元地址,即64K.
存储方式:我们知道,在机器中很多数据是16位,而单元地址是8位,则需要两个单元地址来保存一个十六位数据,故在计算机中以高位高地址,低位低地址来保存,即1234H(H表示十六进制),12H保存在低位,34H保存在高位。而一个十六位的地址,我们以其高位的地址来代表这整个数的地址。

实模式存储器寻址:
我们知道,8086的地址总线宽度为20位,而实模式下最大寻地址空间为1MB,那么如何在16位的机器中表达20位的地址呢,这就要对20位地址进行分段表示,即切割成不同的块,而在8086中,将1MB分割成了64块,那么每一块就是64K,从而20位物理地址由16位段地址和16位偏移地址表示,在计算物理地址时只用将段地址✖16(左移4位)再加上偏移地址就是20位的物理地址了。

段寄存器:
故ds(数据段),es(附加段)等段也是这个意思,每个段可以独立地占用个64kb存储区,而各段也可以重叠,例如代码段只需要8kb,数据段只用2kb,堆栈段只用256b,则可以进行动态分区节约空间,代码段从0~8kb为其地址后,其8kb+1就直接是数据段的地址即可,而这些是由操作系统来完成的。而如果超过64kb,则需要动态地修改段寄存器的内容。


scau汇编综合性实验是一个非常有趣的项目,其中有一个实现在屏幕上移动的“蛇”的任务。我们可以使用汇编语言的指令来控制屏幕的输出和键盘输入。 首先,我们需要定义一个表示“蛇”的数据结构。可以使用一个数组来储存蛇的位置信息,每个元素表示一个身体部位的坐标。我们还需要定义一个变量来表示蛇的长度。 接下来,我们需要在屏幕上绘制“蛇”。我们可以使用汇编语言的命令来控制屏幕的像素,实现绘制功能。首先,我们需要清空屏幕上的内容,然后将“蛇”的每个身体部位的坐标对应的像素点设为特定颜色。 在屏幕上移动“蛇”的思路是,通过监听键盘输入来控制“蛇”的移动方向。当用户按下箭头键的时候,我们通过改变蛇头的坐标来实现移动。之后,我们还需要更新蛇身体的坐标信息,最后再次绘制“蛇”。 同时,要确保蛇的移动过程中不会碰到屏幕边界或者自身身体的其他部位。如果蛇头碰到屏幕边界或者自身身体的其他部位,游戏结束。 在游戏进行过程中,还可以加入一些额外的功能,比如蛇吃到食物后身体加长,每移动一步更新分数等。 这个“蛇”的移动实验可以让我们深入理解汇编语言的编程思想,锻炼我们的逻辑思维和创造力。同时,通过这个实验,我们可以将计算机相关知识与生活中的游戏联系起来,更加直观地感受到计算机的奇妙之处。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值