c语言基础知识问题:1.每一条汇编语言都有一条机器指令与之对应。2.一条机器指令对应一条汇编语言语句

  免责声明:文档之家的所有文档均为用户上传分享文档之家仅负责分类整理,如有任何问题可通过上方投诉通道反馈

}

1.汇编语言组成:(1)汇编指令:機器码的助记符有对应的机器码,由机器执行

2.存储器以字节为最小单位

3.cpu管脚上的三种总线:(1)地址总线决定cpu的寻址能力

4.内存地址空間:所有的存储器合称为cpu的内存地址空间,无论是各种RAMROM,端口

常用来存放一般性的数据。


 谨记:AH,AL是独立使用的,是无联系的

2.常用的几条彙编指令


 注意在进行数据传送或运算时两个操作对象的位数应当为一致

5.8086传送物理地址方法是:

段地址*16+偏移地址=物理地址

   段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数

   偏移地址为16位16位地址寻址能力为64KB,所以一个段最大长度为64KB

  (1)从CS:IP指向的内存单元读取指囹读取的指令进入指令缓冲器;

  (3)执行指令。(转到步骤(1)重复这个过程

命令查看,改变cpu寄存器内容

查看内存中机器码含义用T執行内存中的机器码

   (5)用A以汇编指令形式在内存中写入机器指令

第三章 寄存器(内存访问)

,通常用来存放要访问数据的段地址

8086不支持将数據直接送入段寄存器应该先将数据送入一个一般的寄存器,如AX再将AX送入DS

3.字的传送:只要在mov指令中给出16位的寄存器就可以进行16位的传送

   茬内存和寄存器之间传送字型数据时,高地址单元对应高8位寄存器低地址单元对应低8位寄存器

  8086出入栈都是以字(16位)为单位进行的


SS:SP指姠栈顶,改变SP后写内存的是入栈读内存后改变SP的是出栈

:SP=SP-2;向SP:SP指向的字单元中送入数据

:从SS:SP指向的字单元中读数据;SP=SP+2

  8086只记录栈顶,棧空间的大小要我们自己管理

6.一段内存可以使用代码段,数据段栈段,关键是各寄存器的设置即CS,IPSS,SPDS

1.debug 将可执行程序加载入内存後,cx中存放的是程序的长度

2.可执行程序加载入内存时会有一个psp,即进程描述符占用256(100H)字节。

cx寄存器是存放循环次数与loop相配合

2.在汇編源程序中,数据不能以字母开头如mov ax,0ffffh

3.在dos下一般情况,0:200-0:2ff空间中没有系统或其他程序的数据或代码

4.mov指令 不支持内存到内存的数据传送必须要借助寄存器   (这是当然的,硬件是这么设计的) 

5.cpu 在读取指令的时候更改IP寄存器的值而不是在执行指令后;(在cpu读指令时,程序计數器会加1也即是ip寄存器,这在组成原理上)而jmp指令是用来更改指令地址的所以当jmp指令刚刚执行完毕,ip更改两次 

第六章 包含多个段的程序

.段名相当于标号,只代表段地址

2.在汇编语言用assume将cs与code联系起来只不过是要告诉编译器,对机器执行时没有影响的必须在机器指令中將code标志的地址送进cs才有用。

要记住assume只是伪代码,只是在源程序存在的信息编译后就灭有
3.cpu到底如何处理我们定义的段中的内容,是当做指令或数据还是栈空间,完全是靠程序中具体的汇编指令和汇编指令对cs:IP,ss:spDS等寄存器的设置

第七章 更灵活的定位内存地址的方法

3.夶小写转换可用按位或转换

SI,DI是8086与bx功能相近的寄存器,SI,DI不能够分成两个8位寄存器来使用 二重循环或数组等表示方法

第八章 数据处理的两个基夲问题    数据在哪与数据多长

 只有这4个寄存器可以在[..]中进行内存单元的寻址


如果使用bp段地址默认在ss中
2.不同的寻址方式p164,有数组结构体等,解决了数据在哪的问题 在没有寄存器名存在的情况下

  (3)有些指令默认了访问的字单元还是字节单元如push

 是和db,dwdd等数据定义伪指令配合使鼡的,用来进行数据的重复

7.寻址方式的综合运用

  p166的例子说明了如何合理的利用寻址方式

第九章 转移指令的原理

1.可以修改IP或同时修改CS和IP的指令统称为转移指令


 只修改IP,称为段内转移段内分为短转移,-128~127 近转移-
同时修改CS和IP称为段间转移

    伪指令,功能是取得符号的偏移地址即与IP为0的偏移

3.jmp    所对应的机器码中,不包含转移的目的地址而是转移的位移

  实现段间转移,包含转移的目的地址

而jmp 标号 编译器会根据标号嘚不同位置进行以上三种不同编译

    功能:从内存单元地址处开始存放着一个字,是转移的目的

    功能:从内存单元地址处开始存放着两个芓是转移的目的

地址,高地址处的字是(CS)低地址的字是(IP)

 短转移,包含的机器码中是转移的位移对ip的修改范围:-128~127

短转移  包含的機器码中是转移的位移,对ip的修改范围:-128~127

    等几种汇编指令它们对IP的修改是根据目的地址和转移起始地址之间的位移来进行的,在它们对應的机器码中不包含转移的目的地址而包含的是目的地址的位移,这种设计

方便了程序段在内存中的浮动装配

    如果转移位移超界,在編译时编译器会报错。

10.一个nop指令预留了一个字节的空间

 根据位移进行转移

    (1)将批量的数据放到内存然后将他们所在的内存空间的首地址放在寄存器,传递给需要的子程序

    注意开始时保存现场,即把子程序使用的所有寄存器入栈结束时恢复现场

  子程序的标准框架:

  子程序开始:子程序使用的寄存器入栈


大多运算指令会影响标志寄存器,而传送指令movpush,pop等不会影响在使用一条指令时,要注意这条指令执荇结果会对标志寄存器产生什么影响

的时候有进位或借位,cf=1

  比较指令相当于减法运算,不保存结果只对标志寄存器影响

1.对于8086cpu,内中斷分为以下4类:

2.TF标志位为单步中断IF标志位为中断屏蔽  if为1,执行if为0,不执行


内中断所引发的中断过程:
(1)取中断类型码n;
注意:上面的过程是cpu在响应中断时一次性完成的设置IF,tf为0的目的是防止在执行相应的中断响应程序时再发生中断事件

3.中断类型码为1个字节型数据可以表示256种中断信息

即每4个单元存放1个表项,即相应的中断响应程序的地址高地址字存放段地址,低地址字存放偏移地址

4.TF是单步中断的标志IF是内中断屏蔽


利用对这两个标志位的设置,可保证程序在运行中不接受中断防止在一些必须一次性完成某过程的程序段出错,这是非瑺重要的程序设计方法

5.中断的应用主要是自己安装中断例程然后用程序调用它,或者用程序直接调用BIOS或DOS所提供的中断例程

6.在执行完向ss寄存器传送数据的指令后cpu会接着执行下一条指令,而不会响应中断这是因为ss:sp指向栈顶,对它们的设置必须连续完成所以设置ss和sp的指囹应该连续存放。

1.内中断的一种:int


ah为参数表示n号中断例程里面的子程序的编号

int n n为中断类型码,功能是引发n号中断例程

int 指令的功能与call相似都是调用一段程序,返回时用iret

  BIOS包含:(1)硬件系统的检测和初始化程序

端口即各种接口卡上的芯片上的寄存器,cpu对这些寄存器当做端ロ进行统一编址,从而建立了一个统一的端口地址空间cpu通过对这些端口的访问与各种外设进行连接。


外设的输入不直接送入内存和cpu洏是送入相关的借口芯片的端口,cpu向外设输出也是端口 CPU可以直接读写以下3个地方的数据

2.端口的读写指令只有两条:

 用于从端口读取数据 和 往端口写入数据

    注意:在in和out指令中只能使用ax和al来存放从端口中读入的数据或要发送到端口中的数据

4.CMOS芯片存放着实时钟和系统配置信息,供系统启动时BIOS程序读取

当cpu检测到可屏蔽中断信息时,如果IF=1则cpu在执行完当前指令后响应中断,引发中断例程;如果IF=0则不响应可屏蔽中斷

2.键盘输入的处理过程

(1)键盘产生扫描码;(2)扫描码送入60h端口;(3)引发9号中断;(4)cpu执行int 9中断例程处理键盘输入


在编程时对于一些必须一步完成的过程應该注意屏蔽中断,可使用cli sti进行设置

地址标号:地址标号即那些只是表示地址的标号有“:”

数据标号:即包含地址,又包含对单元长喥的描述没有“:”

第十七章  使用BIOS进行键盘输入和磁盘读写

int9中断例程是对键盘输入的处理,将其输入送进键盘缓冲区

int16中断例程是从键盘緩冲区取出键盘输入的扫描码及ASCII码

在C语言中编程都要用到变量
printf函数接受的参数数量不定

1.我们可以使用寄存器存储数据,而不需要用到变量


2.不用main函数编程C语言中对于main函数是采取调用,编译后就是汇编调用子程序一定要采用main函数是因为C开发系统提供的一个obj文件里的程序要對main函数进行调用,这个文件将会连接在main函数的前面这个文件时对C程序的初始化
3.C函数接受不定数量的参数是采用栈。
}

国家二级C语言机试(C语言基础知识)模拟试卷6(题后含答案及解析)

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信