考试题型
一、简答题(30分 背概念)
二、计算题
三、程序填空题
四、程序设计题(40分 6,7章内容)如果不会写就写个框架 实在不会就用C语言写
五、开放大题:谈谈对本课程的看法(个人用GPT生成的答案)
汇编语言程序设计是计算机专业必修的专业基础课,汇编语言是计算机及电子信息类专业十分重要的基础课程,是学好操作系统、编译原理的知识准备。它能充分发挥和利用计算机硬件特性的语言,能够完成高级语言难以胜任甚至无法完成的任务汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。汇编语言比机器语言的可读性要好,但跟高级语言比较而言,可读性还是较差。不过采用它编写的程序具有存储空间占用少、执行速度快的特点,这些是高级语言所无法取代的。
课本
第一章 汇编语言基础知识
机器语言:用二进制编码组成的机器指令的集合和一组使用机器指令的规则。 汇编语言:对机器指令中的操作码用英文单词的缩写描述(助记符),对操作数用标号、变量、常量描述。
汇编语言的特点:
(1)与机器有关:移植性差,但可直接控制硬件。
(2)程序效率高。
(3)局限性:受指令的限制,如考虑存储单元等。
(4)调试困难。
1.1.2汇编语言的组成
汇编语言由以下三类指令组成(前两类出现在哪些地方,第三类出现在表达式里)
(1)汇编指令:机器码的助记符,有对应的机器码,它是汇编语言的核心
(2)伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
(3)其他符号:如+-*/等,由编译器识别,没有对应的机器码
1.2 计算机中数据的表示
补码的补码是原码,XOR异或是相同为0,不同为1.
要记住的十六进制ASCII:0->30 9->39 A->41 Z->5A a->61 z->7A
第二章 计算机基本原理
2.1 计算机系统组成
冯诺依曼计算机结构:由中央处理器CPU,存储器和输入/输出子系统三大部分组成,用系统总线bus连接在一起
课本10页的图看一下
2.2存储器
2.2.1 16位结构的CPU
8086具有四方面结构特征:①数据总线为16位②运算器一次最多处理16位数据③寄存器最大宽度16位④寄存器和运算器之间通路为16位
2.2.2 存储器
1B=8bit 1字节=8位 2字节=1字,字word由两个字节组成,分为高位和低位,低地址放低位,高地址放高位
代码段——存放指令,CS;数据段——存放数据,DS;附加段——辅助存放数据,ES;堆栈段——重要的数据结构,SS。必须要有代码段,其余三个可根据需要选择
2.2.4 逻辑地址
规定:段地址×16(二进制左移四位,十六进制左移一位)+偏移地址=物理地址
2.3 CPU中的寄存器
P17 结构图,寄存器的组成,具体看课本
寄存器可分为通用寄存器,段寄存器,专用寄存器三类
(1)通用数据寄存器:AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,有时候也可以存放地址。 (2)地址寄存器:SI、DI、BP、SP的主要作用是存放数据的所在偏移地址,也可以存放数据。 (3)段寄存器:CS,SS,DS,ES。它们用来存放4个段的段基址。 (4)指令指针寄存器:IP,存放即将执行指令的偏移地址。 (5)标志寄存器:FLAGS,存放CPU的两类标志,状态标志和控制标志。
状态标志:
①OF:溢出标志,有符号数情况下,OF=1是溢出、出错,为OV;OF=0是无溢出、正确,为NV;
②SF:符号标志,有符号数情况下,SF=1表运算结果最高位为1。SF符号(负/正),1——NG,0——PL
OF=0(无溢出)时,SF=1表负,SF=0表非负。
③ZF:零标志,ZF=1表示为0——ZR,ZF=0表示非0——NZ
④CF:进位/借位标志(有/无),CF=1时表示有进位——CY,CF=0时表示无进位——NC
CS和IP提供了CPU要执行指令的地址,不允许认为更改数值,都由系统操作。
CPU工作过程①从CS:IP指向的内存单元读取指令,指令进入指令缓冲器②IP=IP+所读取指令的长度,从而指向下一个指令③执行指令,转到步骤①重复操作
堆栈必须以字存入,每次存入一个字,栈指针SP加2减2,先进后出,保存调用的程序的返回地址以及现场参数
第三章 汇编语言程序实例和上机操作
3.3上机步骤
怎样生成可执行文件:每一步输入,结果(代码文件)
框架:
code segment
assume cs:code,ds: data
……
mov ah,4ch
int 21h
code ends
end start
上机步骤:
编辑——建立ASM源程序文件 ,汇编——产生OBJ二进制目标文件,连接——产生EXE可执行文件,最后执行或调试可执行文件中的程序
3.5常用的DOS系统功能调用(INT 21H)
记住int 21H功能,参数,返回值存在哪里
课本42页
AH | 功能 | 入口参数 | 出口参数 |
---|---|---|---|
01 | 键入一个字符并回显 | 无 | AL=输入字符 |
02 | 显示输出一个字符 | DL=输出字符 | 无 |
07 | 键盘输入(无回显) | 无 | AL=输入字符 |
09 | 显示字符串 | DS:DX=串地址 字符串以'$'结束 | 无 |
0A | 键盘输入到缓冲区 | DS:DX=缓冲区首地址,(DS:DX)=缓冲区字节数 | (DS:DX+1)=实际字节数(DS:DX+2)=输入的串地址 |
4C | 程序结束 | AL=返回码 | 无 |
第四章 操作数的寻址方式
记住7大寻址方式的名称 形式 给定一个要访问的 要知道以什么形式访问 用相应的寻址方式 写出操作数
4.4-4.7 即51页到54页 存在寄存器限制,BX BP SI DI都能用
立即寻址:所要找的操作数直接写在指令中。
注意:立即寻址只能用于源操作数字段;立即数的形式必须与目的操作数的类型一致,均为字或字节
比如MOV AL,6H可以,AL是目的操作数,6H是源操作数,反过来就不可以
寄存器寻址:操作数就是寄存器中的值。16位寄存器有AX,BX,CX,DX,SI,DI,SP,BP,8位操作数有AH,AL,BH,BL,CH,CL,DH,DL。严禁位数不同赋值
直接寻址:操作数的有效地址EA就在指令中,指令形式为MOV AX,DS:[4050H],方括号里的数值作为操作数的偏移地址(有效地址),操作数的物理地址=(DS)*10H+EA(即十六进制左移一位再加上方括号里数值)
书写汇编源程序.ASM文件时,必须有前缀DS: 看P50
寄存器间接寻址:操作数的有效地址EA就在寄存器中,只允许BX,BP,SI,DI。把寄存器的内容作为操作数的地址,而操作数还是在内存中。看P51 52
DS是段地址时,BX SI DI是有效地址EA;SS是段地址时,BP是有效地址EA
寄存器相对寻址:操作数的有效地址EA是一个寄存器和位移量之和
这里是有效地址EA也要进行计算 随后再算有效地址
基址变址寻址:操作数的有效地址是一个基址寄存器和变址寄存器的内容之和。
基址寄存器为BX或BP,变址寄存器为SI或DI,其中BX对应DS,BP对应SS
操作数的物理地址=(DS)×10H+(BX)+(DI或SI)
操作数的物理地址=(SS)×10H+(BP)+(DI或SI)
相对基址变址寻址:操作数的有效地址是基址寄存器和变址寄存器以及位移量之和。
操作数的物理地址=(DS)×10H+(BX)+(DI或SI)+8位或16位位移量
操作数的物理地址=(SS)×10H+(BP)+(DI或SI)+8位或16位位移量
第五章 常用指令系统
常见的指令要认识,知道其作用
5.1 数据传送指令
MOV指令为双操作数指令,须遵循双操作数指令的规定:
①源操作数与目的操作数的长度必须明确且一致,即必须同时为8位或16位。
②目的操作数与源操作数不能同为存储器,不允许在两个存储单元之间直接传送数据
③目的操作数不能为CS或IP,因为CS:IP指向的是当前要执行的指令所在的地址。
④目的操作数不可以是立即数。立即数无存储空间(即常量不能在等号左边)
源操作数为立即数的话,立即数的长度不大于寄存器的位数即可。MOV AH,258错误
段地址寄存器须通过寄存器得到地址,不能直接由符号地址、段寄存器、立即数得到
MOV AX,DATA_SEG
MOV DS,AX(这两句一起写才对)
TABLE无论是何种类型的变量,有效地址EA总是16位的
MOV BX,OFFSET TABLE是把变量TABLE的偏移地址给BX,写成8位的BL就不对
栈:进栈PUSH,栈顶指针SP减2;出栈POP,栈顶指针SP加2,源操作数地址由SS:SP指定
堆栈的操作是以字为单位进行操作的。
XCHG交换指令,两个操作数均是目的操作数,不能出现立即数。5可以存到AX,但AX不能存到5里
操作数长度要一致,且不能同为存储单元
5.2 算术运算指令
算术运算指令通常只需要一个操作数,另一个操作数则为默认寄存器
类型扩展指令:为了使两个操作数长度一致。都要看AX或AL中最高位是否为1
CBW字节扩展成字:AL扩展到AX,若AL最高位为1(负),用CBW时AH=FFH;若AL最高位为0(正),则AH=00H
CWD字扩展成双字:AX扩展到(DX,AX),DX存放双字中高位,AX存放双字中低位。
若AX最高位为1(负),用CWD时DX=FFFFH;若AX高位为0(正),则DX=0000H
ADD将源操作数与目的操作数相加,结果存入目的操作数中。
无符号数的溢出标志位CF
如果是无符号数ADD,要看CF位,CF=0正确,CF=1错误有溢出。如果是有符号ADD,就用补码运算,不用看CF
有符号数的溢出标志位OF
8位二进制可以表示的十进制数范围是:无符号数0——255,有符号数-128——+127
有符号数中,一正一负不会溢出,两操作数符号相同才可能溢出
ADC带进位的加法:数A放在DX(高位)和AX(低位)中,数B放在BX(高位)和CX(低位)中
ADD AX,CX
ADC DX,BX
两条指令完成低位字的加和高位字的加,在高位时用ADC指令,把低位相加时产生的进位加进来。
低位如果CF=1有进位就加到高位中,低位无需考虑是否溢出,高位的溢出才是真正的判断依据
SUB指令是目的操作数减源操作数。
假如是无符号数相减,被减数比减数小不够减,就把CF=1表明是借位,说明无符号数运算溢出
假如是两个有符号数,与加法相反,符号相同不会溢出,符号相反可能溢出——看OF位
SUB AX,CX
SBB DX,BX
两条指令完成低位字的加和高位字的减,在高位时用SBB指令,把低位相减时产生的借位表示出来。
NEG求补指令(求相反数)CMP比较指令,用目的操作数减源操作数,DEC减1指令
乘法指令MUL和IMUL格式:MUL SRC
两个相乘的数必须长度相同,默认参与运算是AL或AX寄存器的值。SRC是寄存器或变量,不能是立即数,因为立即数长度是不明确的
除法指令DIV和IDIV格式:DIV SRC
被除数长度应为除数长度的两倍,如SRC为字节操作时,被除数应该为16位,为字操作时,被除数应该为32位
高位AH或DX存放余数,低位AL或AX存放商
5.3 逻辑与位移指令
与AND——实现某几位的屏蔽,或OR——实现把某几位置为1或0,异或XOR——实现某几位取反
SHL,SHR逻辑左移右移;SAL,SAR算术左移右移。ROL,ROR循环左移右移
若移位的次数大于1,则先把移位的次数送入CL寄存器中
5.5 程序转移指令
JMP
JZ结果为0转移,JNZ结果不为0转移;JS结果为负转移,JNS结果为正转移;
JO结果溢出转移,JNO结果不溢出转移;JC结果进位位为1转移,JNC结果进位位为0转移
LOOP循环,LOOPZ/LOOPE当为0/相等时循环,LOOPNZ/LOOPNE当不为0/不相等时循环
以上循环的操作都是先执行CX寄存器减一,然后根据测试条件决定是否转移
重点是:地址传送获取 数据传送有关的
第六章 伪指令与源程序格式
-
内存分配 存储器单元分配相关的
-
P103 作用+会计算对应的偏移量(用的时候单元偏移量是多少)内存的分配
-
其他看到名称只认识就行
END [label]其中label表示程序开始执行的起始地址,如果多个程序模块相连接,只有主程序需要使用标号,其他子程序只用END而不能指定标号
6.2语句格式
第七章 分支与循环程序设计
程序设计题 ①填空,写结果②写程序