汇编语言 学习笔记(updating...)

来源:互联网 发布:类似wiboxls的软件 编辑:程序博客网 时间:2024/06/06 01:21
 
《汇编语言》王爽 《IBM-PC汇编语言程序设计》学习笔记
 为什么会有汇编语言?因为机器码难记,难改错,所以出现了汇编语言,即用更自然的语言表示机器码。 由汇编语言到机器语言需要编译器的参与,我们在写汇编语言的时候不仅写汇编的指令,还写一些伪指令,这些伪指令是计算机不会执行的,其他的一些运算符号也是由编译器识别,而没有对应的机器码。
存储器是数据和指令存储的地方,就像人类的记忆系统。名字不一样,但对计算机而言,指令和数据是没有差别的,它们都是以二进制的方式存储。(那么CPU如何知道它是程序还是指令呢?)CPU可以直接使用的信息就存放在存储器中。

     好,接下来,CPU要开始对数据进行读写了。它怎么知道数据在哪里呢?所以需要存储地址;是要进行读操作还是写操作呢?所以需要控制指令,数据又如何进行传输呢?这三种信息都有总线进行传输。逻辑上分为三种总线,是三种,不是三根。
     地址总线,每根线有两种稳态,高和低,即1和0;n根线能够表示2的n次方个地址数据
     数据总线传送大小同理。
     内存地址空间,cpu通过总线与外围存储器(RAM,ROM)相连接,在CPU看来,不同的设备都是一样的存储器,都当它们是内存。即形成了一个逻辑上的存储器。当然,它是假想的。
    


CPU工作原理这句话是什么意思?由寄存器实现CPU的功能吗?改变寄存器实现对CPU的控制,什么意思?改变CPU中寄存器中的值,也就是控制本身了吗?

     物理地址的获得,因为20与16的矛盾,使用所以需要两16来拼为20,即一个16左移一位,与另一个16相加。物理地址=基础地址(段地址*16)+偏移地址。

提供段地址的寄存器即段寄存器,有:CS、DS、SS、ES.

and or 指令

大小写转化 无法用现在已经学过的知识解决,就重新观察,寻找规律。
[bx+idata] 数组结构 高级语言提供便利
idata[si/di]
2[si] 3[si] 从不同的地方开始,但每次偏移数相同 
不同寻址方式的灵活运用
从更加结构化的角度来看待所要处理的数据
一般来说,在需要
暂存数据的时候,我们都应该使用栈。

数据:数据在哪里?有多大?
--------
疑问:

我们给存储单元编号,而现实中不是没有真的编号吗?计算机是如何识别不同位置的呢?地址信息,由地址总线传输。

规定固定的机器码对应固定的操作,指令。

芯片是什么?外围芯片组是什么?

为什么8086CPU有20位的地址总线,却只有16位的CPU结构?这不是很矛盾吗?
所以有实模式寻址方式。
8086CPU为什么不支持将数据直接送入段寄存器呢?这属于硬件设计问题。(==)


word ptr指定类型

如何判断一个指令的长度?
—————————————————
宏汇编
就像模块化的函数,直接进行调用,实现一定的功能。
-------------
lable:
buffer1 lable word
buffer2 db 20 dup(?)
同一数据定义了两种类型,使得数据匹配。
this:
buffer1 equ this word
buffer2 db 20 dup(0)
mov ax,buffer1相对于 mov ax,word ptr buffer2

例题:



0 0
原创粉丝点击