(考研复试)汇编语言笔记
- 格式:docx
- 大小:13.83 KB
- 文档页数:2
第一章预备知识一、教学基本内容1、了解机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,正确认识学习汇编语言的重要性。
2、掌握8086处理器中各寄存器的符号表示形式、大小及主要用途。
3、理解主存的编址方式以及存储器物理地址形成的方式。
4、理解8086处理器关于使用堆栈的有关规定,掌握堆栈操作指令的功能以及使用格式。
5、掌握数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式。
6、掌握标志寄存器中各标志位的置位方式。
重点:主存的编址方式以及存储器物理地址形成的方式难点:堆栈的概念及使用。
二、知识点:1、机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,要求达到“识记”层次。
2、8086处理器中各寄存器的符号表示形式、大小及主要用途,要求达到“识记”层次。
3、主存的编址方式以及存储器物理地址形成的方式,要求达到“理解”层次。
4、堆栈的概念及堆栈操作指令执行后内存及相关寄存器值的变化,要求达到“理解”层次。
5、数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式,要求达到“理解”层次。
6、标志寄存器中各标志位的置位方式,要求达到“识记”层次;运算对各标志位的影响,要求达到“掌握”层次。
1.1机器语言和汇编语言1、机器语言●三种语言的层次关系机器语言汇编语言高级语言●机器指令:指挥计算机完成某一基本操作的命令。
格式:操作码地址码1 地址码2例:将偏移地址为100的字存储单元中的内容加2,在回送到原存储单元中去的机器指令如下:8306640002其中8306H为操作码6400H 为目的操作数02H 为源操作数●指令系统:机器指令面向机器,每台计算机都规定了自己所特有的一定数量的基本指令,这批指令的全体即为该计算机的指令系统●机器语言:这种机器指令的集合。
● 机器语言程序:用机器语言编写的程序。
2、汇编语言ADD WORD PTR DS:[100],2● 汇编语言:用助记符表示机器指令的操作码; 用变量代替操作数的存放地址;在指令前冠以标号,用来代表指令的存放地址 ● 汇编语言与机器语言 注: 汇编程序:能够将汇编源程序翻译成目标程序(机器语言) ● 汇编语言的特点:① 所占空间、执行速度与机器语言相仿② 直接、简捷,能充分控制计算机的硬件功能1.2 Intel 8086 微处理器简介通用寄存器: AX(累加器) BX(基址寄存器) CX(计数器)DX(数据寄存器) ;可以分8位使用。
1.机器指令:0101010之类的二进制数。
2.CUP把机器指令转换为高低电平驱动(控制)计算机部件运行。
3.汇编语言包括:a)汇编指令(由翻译软件——编译器翻译成机器指令)b)伪指令(告诉翻译软件,汇编指令按什么步骤翻译)c)符号指令:+ - * /(也由编译器执行)4.指令和数据都2进制形式存储在内存当中。
5.寄存器中1(或2)个字节能存放的最大数是:a)16进制:FFh(或FFFFh)b)10进制:255(或65535)所以,mov ax,65536 是错误的。
但是,mov ax,65535add ax,2 //最后ax = 0001h; 本来应该是1 00 01h,第一个1为溢出位(ax寄存器放不下,但是不代表cpu就扔了,而是存放到其他地方去了)mov ah,FFadd ah,2 //同理,ah = 01h; 本来应该为1 01,但是第一位1,但ah寄存器放不下,所以存放到了其他地方。
6.通用寄存器:ax, bx, cx, dx;它们都是16位寄存器,可以分成两个独立的8位寄存器,可以存放一个字型数据(word = 2Byte)。
短地址寄存器:cs, ds, es, ss偏移地址寄存器:bp, ip, sp, si, di, bx7.物理地址= 短地址* 10 + 偏移地址cpu 将cs:ip 所指向(组合成)的地址中的数据当作指令!8.指令执行的过程:(1)cpu从si:ip所指向的内存地址中读取指令,并将这个指令存放到指令缓存器中。
(2)将:ip = ip + 所读指令的字节数(3)执行指令缓存器中的指令;回到步骤(1),重复这个过程。
9.转移指令--jump(1)jump 2000:1000 //cs = 2000; ip = 1000;(2)jump 寄存器//ip = 寄存器(中的值)ps:不能用mov 指令和数据直接修改cs或ip 寄存器中的内容:mov cs,2000;//错!mov ip,1000;//错!对cs而言,可以用mov指令间接的修改:mov ax, 2000;mov cs, ax;10.汇编程序员,通过汇编指令修改寄存器中的内容来控制cpu, 从而控制计算机。
汇编语言重点知识总结汇编速查手册汇编语言总结概要寄存器与存储器1.寄存器功能.寄存器的一般用途和专用用途.CS:IP 控制程序执行流程.SS:SP 提供堆栈栈顶单元地址.DS:BX(SI,DI)提供数据段内单元地址.SS:BP 提供堆栈内单元地址.ES:BX(SI,DI)提供附加段内单元地址.AX,CX,BX 和CX 寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。
.PSW 程序状态字寄存器只能通过专用指令(LAHF,SAHF)和堆栈(PUSHF,POPF)进行存取。
2.存储器分段管理.解决了16位寄存器构成20位地址的问题.便于程序重定位.20位物理地址=段地址*16+偏移地址.程序分段组织:一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。
3.堆栈.堆栈是一种先进后出的数据结构,数据的存取在栈顶进行,数据入栈使堆栈向地址减小的方向扩展。
.堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。
.堆栈总是以字为单位存取指令系统与寻址方式1.指令系统.计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。
执行指令后,一般源操作数不变,目的操作数被计算结果替代。
.机器指令由CPU 执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类:数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。
2.寻址方式.寻址方式确定执行指令时获得操作数地址的方法.分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。
.与数据有关的寻址方式的一般用途:(1)立即数寻址方式--将常量赋给寄存器或存储单元(2)直接寻址方式--存取单个变量(3)寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度计算机、电子信息、通信工程专业适用涉及微机原理、单片机原理本资料结合知识点整理了近年来各名校复试真题考研 专业课复试 高频考点复习指导8086对存储器进行访问取指令时,物理地址可由(CS和IP )组合产生。
汇编语言笔记
汇编语言是一种低级机器语言的抽象,它使用特定的符号和指令来编写程序。
它直接操作计算机的硬件资源,包括寄存器和内存。
汇编语言是计算机科学中非常重要的一门学科,它可以让程序员直接控制计算机的底层操作,从而更好地理解计算机的工作原理。
与高级语言相比,汇编语言更加直接,因此在某些特定的应用场景中具有独特的优势。
在编写汇编语言程序时,我们需要了解机器指令的编码方式、寄存器的使用方法以及内存的管理。
汇编语言程序通常由指令、数据和标号组成。
指令用于告诉计算机执行特定的操作,数据用于存储程序需要处理的信息,而标号则用于标识程序中的跳转目标。
与高级语言相比,汇编语言的程序执行速度更快,因为它直接操作硬件资源。
此外,汇编语言还可以更好地控制计算机的资源分配,从而实现更高效的程序设计。
然而,汇编语言也有其局限性。
首先,它对程序员的要求较高,需要对计算机硬件有深入的了解。
其次,由于不同的计算机体系结构和操作系统有不同的汇编语言指令集,编写的汇编语言程序不具备平台移植性。
尽管汇编语言在一些特定的应用场景中仍然得到了广泛的应用,但随着高级语言的发展和优化,其在大多数应用程序开发中的使用已经逐渐减少。
然而,了解汇编语言仍然对程序员具有重要的意义,它可以帮助我们更好地理解计算机的工作原理,并在某些特定的场景中实现更高效的程序设计。
1:用高级语言编写的程序叫做源程序,然后用编译程序吧源程序翻译成二进制的目标程序,然后将该目标程序与系统函数库以及其他目标程序连接,形成可执行程序。
2:算法五个特点:确定性,有穷性,输入,输出,可行性。
3:程序流程图、N-S盒图、伪代码4:int无论有符号无符号,都是16位Short无论是有符号还是无符号都是16位Long无论是有符号还是无符号都是32位Float 32位double 64位,long double 128位。
一个整型常量后面加u就是无符号,加l就是长整型5:\t,\b退格,\r移到本行开头6:‘0’48,‘A’65,‘a’97,差值327:级别char<int<unsigned<long<double8:(int)x+y只是int化x;9:i+++j(i++)+j10.1:float 32位,24位表示小数部分(其中包括了符号位),8位表示指数部分。
11:字符给整形赋值,如果是无符号字符型,赋值给整形就是占据整形低8位,高8位补0,如果是有符号字符型,如果是负号就补1,正好补0;12:int short long给char就是把低8位给char13:整形给long,同char给int一样,14:putchar() Getchar()Puts(),gets()Printf(“%md”,d) %d,%c,%f,%ld,%o,%x,%u,%s%d的原意是,按十进制整形数据输出M表示输出字段的宽度,数字靠右拜访。
如果数字太大,就输出数字,不管m.Printf(“%m.ns”,d)输出占m列,靠右端,只取字符串中的前n个字符,如果n大于m,则不管mPrintf(“%-m.ns”,d)输出占m列,靠左端Printf(“%m.nf”,d)%f输出实数,包括单精度和双精度,只能输出六位小数,输出n位小数Printf(“%m.ne”,d)N指的是输出小数的位数,Scanf输入整形,分割可以用回车或者tab或者空格但是不能用逗号Scanf(“%3d%3d”,&a,&b)输入123456.系统自动把123赋值给a,456赋值给b;同理,如果系统输入abc三个字符,但是ch只能容纳一个,就吧a给ch,bc给后面的。
MOV说明: 指令中dest和src不能同时为存储器操作数,串操作指令除外;CS不能做为目的操作数使用;段寄存器之间不能互相传送;立即数不能送入段寄存器;不允许手工修改CS的值。
MOV CS,AX;非法指令PUSH说明: PUSH指令的目的地址一定在当前堆栈中。
SS内容为段基址,偏移量由堆栈指针SP指出。
操作数一定是16位的寄存器或存储器操作数。
POP说明:目的操作数只能是16位的存储器或寄存器操作数(CS除外)。
XCHG说明: dest和src不能同时为存储器操作数;即不能在存储器与存储器之间互换据数;段寄存器、立即数都不能用作操作数。
XLAT说明: XLAT指令用于查表。
表的开始地址即表头地址由BX寄存器给出。
AL中的原始值是要寻址的表中元素地址的位移量,规定表中第一个字节的位移量为0。
LEA说明: LEA指令是将源操作数地址的偏移量,即有效地址传送到目的操作数中。
源操作数必须是一个存储器操作数,目的操作数可以是任一16位通用寄存器、指针寄存器或变址寄存器。
LDS说明: LDS是将src指出的连续两个字的内容,即一个32位的指针变量传送到一对16位的目的寄存器中。
高位字内容为段基地址,LDS指令将其传送到数据段寄存器DS中,低位字内容为偏移量,传送到由dest指出的一个通用寄存器,指针寄存器或变址寄存器中,但不能是段寄存器。
LES说明: LES是将src指出的连续两个字的内容,即一个32位的指针变量传送到一对16位的目的寄存器中。
高位字为段基地址,LES指令将其传送到附加段寄存器ES中,低位字为偏移量,传送到由dest指出的一个通用寄存器,指针寄存器或变址寄存器中,但不能是段寄存器。
IN说明: acc为累加器AX或AL,取决于所访问端口的类型,若端口为16位长,则累加器为AX;若端口为8位长,则累加器为AL。
注意:port为所访问的端口地址,其寻址方式有两种:直接寻址和间接寻址。
若其值在0~255之间,则既可以使用直接寻址,也可以使用间接寻址;若其值大于255,则必须使用间接寻址。
汇编语言学习笔记《汇编语言》--王爽前言学习汇编目的:充分获得底层编程体验;深刻理解机器运行程序的机理。
原则:没有通过监测点不要向下学习;没有完成当前实验不要向下学习。
第一章基础知识有三类指令组成汇编语言:汇编指令;伪指令;其他符号。
8bit = 1byte = 一个存储单元有n根地址线,则可以寻址2的n次方个内存单元。
1.1节--1.10节小结(1)汇编指令是机器指令的助记符,同机器指令一一对应。
(2)每一种cpu都有自己的汇编指令集。
(3)cpu可以直接使用的信息在存储器中存放。
(4)在存储器中指令和数据没有任何区别,都是二进制信息。
(5)存储单元从零开始顺序编号。
(6)一个存储单元可以存储8个bit,即八位二进制数。
(7)每一个cpu芯片都有许多管脚,这些管脚和总线相连。
也可以说,这些管脚引出总线。
一个cpu可以引出的三种总线的宽度标志了这个cpu不同方面的性能。
地址总线的宽度决定了cpu的寻址能力;数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了cpu对系统中其他器件的控制能力。
监测点:1KB的存储器有1024个存储单元?存储单元的编号从0到1023.内存地址空间:最终运行程序的是cpu,我们用汇编编程时,必须要从cpu的角度思考问题。
对cpu来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受cpu寻址能力的限制。
这个逻辑存储器即是我们所说的内存地址空间。
第二章寄存器(cpu的工作原理)mov ax, 2add ax, axadd ax, axadd ax, ax(1)cpu中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;(2)段地址和偏移地址通过内部总线送人一个称为地址加法器的部件;(3)地址加法器将两个16位地址合成为一个20位的物理地址;(4)地址加法器通过内部总线将20位物理地址送人输入输出控制电路;(5)输入输出控制电路将20位物理地址送上地址总线;(6)20位物理地址被地址总线传送到存储器;段地址*16+偏移地址= 物理地址的本质含义内存并没有分段,段的划分来自cpu。
汇编语言学习笔记---傻瓜学汇编前言当我在学汇编的时候发现一到了实际编程就发现学过的那些指令串不起来,什么浮点数啊整数啊,怎么跳转啊,怎么循环啊,脑袋立马变成浆糊。
下面的文档是我的学习经历,希望对初学者在学习加密解密,软件调试,单片机编程有点帮助。
目录1.编程环境的搭建2.深入理解汇编语言的数据3.顺序程序设计4.分支结构程序设计5.循环6.数组及指针7.函数8.结构9.综合运用10.参考文献一:编程环境的搭建首先装好masm32v10 和windbg,和editplus,然后在editplus中输入下面的程序,具体的请参考罗云彬的那本书,里面有详尽的说明,编译运行看看:.386.model flat,stdcalloption casemap:noneincludelibmsvcrt.libprintf proto C :V ARARG.datamsg db "hello,this is the first test program!", 0dh ,0ah,0.codestart:call mainretmain procpush offset msgcall printfadd esp,4push offset msgcall printfadd esp,4retmainendpend start下面是运行结果:这里输出两行消息主要是我在写这个最简单的程序的时候发现他不换行,于是我在数据定义后面我加了“0ah,0dh”,呵呵,就是回车换行的十六进制表示,你也可以用其他方法试试,程序就不多解释了,后面会有更多的解释,不过你一定要走到这以步,才能进行下一章。
2.深入理解汇编语言的数据整数常量及变量,先看一段很简单的汇编程序:.386.model flat,stdcalloption casemap:noneincludelibmsvcrt.lib。
汇编学习笔记-11.基础1.1汇编语⾔机器语⾔:是“机器指令”的集合,机器指令是⼀串⼆进制数字,可以由计算机转换为⼀列⾼低电平并执⾏每⼀种cpu,都有⾃⼰的指令集。
也就是不同cpu因为设计不同,指令集也是不同的但由⼆进制数组成的机器语⾔显然不易于阅读,记忆,所以也就有了汇编语⾔汇编语⾔实际上是机器语⾔的助记符,编些完后通过编译器,将汇编代码替换成机器能执⾏的⼆进制串汇编代码由这三部分组成:1. 汇编指令:机器码助记符,也就是它有对应的机器码2. 伪指令:没有对应机器码,由编译器执⾏(在编译过程中)3. 其他符号:⽐如 +,−,∗,/,由编译器识别当然,汇编的主要部分是汇编指令,后两种都是写给编译器看的(其实算是⼀类,主要是有符号和指令的区别)1.2存储器和其它有关存储、数据等存储器⽤来存储数据、指令它被划分为⼀些存储单元(编号从 0 开始),⼀个单元存储⼀个 Byte,也就是⼋个⼆进制位主要的存储器是内存,不同与磁盘,cpu只能从内存⾥读取数据、指令,不能从磁盘读取。
因此,任何磁盘中的指令或数据,想要被cpu使⽤,都必须先加载到内存⼀般如果要画图表⽰某⼀段内存中的数据的时候,习惯将低地址放在上,⾼地址在下,也就是从 0 开始从上往下来写这也意味着,从这种图⾥读⼀个⼆进制数的时候,要从下向上读上⾯提到了数据和指令,其实指令就是以前说的机器码,和数据⼀样,在存储器上看,都是⼆进制串,没有什么不同只是cpu在处理时,将他们区分开,分别作为指令来执⾏,作为数据来处理cpu对存储器的读写以及三种总线上⾯说存储单元有⼀个“编号”,这个编号就被称为某⼀段数据的地址如果cpu想在某段存储单元读或写,就要先给出它的地址,有了地址以后,还要知道操作是读还是写,以及读出的或要写⼊的数据是什么所以,cpu会和对应的芯⽚进⾏三种信息的交互:地址,读或写的数据,以及读或写的命令(称为控制信息)那么就要⽤到下⾯说到的三种总线了地址总线⽤来指定读写的存储单元cpu把地址发送给内存进⾏寻址(内存收到以后会⾃动定位过去),如下图,每⼀根地址总线能发送⼀个⼆进制位(零或⼀)当然,cpu在发送地址之前,要在内部先⾏成这个地址。
1:BCD码:二进制运算简单,计算机易实现,但是不直观,于是用BCD码,有压缩BCD和非压缩BCD。
2:intel CPU的三种运行模式:实模式(CPU复位和加电的时候以实模式工作,所有段都是可读可写,没有特权概念,不支持多任务切换),保护模式(提供了多任务,分段分页,特权级保护等功能,段4G,段内偏移32位、支持多任务),虚拟8086模式(虚拟86模式是为了在保护模式下执行8086程序而设置的)。
3:寄存器:数据寄存器(ABCD),指针寄存器(SP.,BP)变址寄存器(SI,DI)以上是通用寄存器。
控制寄存器(IP,FLAGS)。
以下是段寄存器,代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS,附加段寄存区ES,还有FS和GS。
4:标志位:CF:最高位进位借位。
PF:按1的个数,偶1奇0。
AF:低四位进位借位。
ZF:0标志。
SF:负数为1。
OF:溢出。
5:地址表示法:段基址:偏移量(1234:5678),对应的物理地址是12340+5678=179B8H(注意H)
6:立即寻址方式,MOV AL,6
寄存器寻址方式MOV,BX,AX
直接寻址方式MOV AL,[78H]
寄存器间接寻址MOV AL,[BX]
寄存器相对寻址MOV AL,[BX+8]
[]里只能是BX,BP,SI,DI,
基址变址寻址方式MOV AL,[BX][SI]
基址只能是BX BP 变址只能是SI DI 386以后随意相对基址变址寻址MOV AL,3[BX][SI]
7:DOS的exe文件进入内存:DOS程序先为exe建立一个256B的程序段前缀PSP,把文件头读入内存工作区,计算模块大小,计算装入起始段的地址,初始化寄存器和指针寄存器,把控制权交给exe。
8:汇编程序一开始要定义一个数据段,用DATA SEGMENT 和DATA ENDS。
同理,代码段需要CODE SEGMENT 和CODE ENDS。
在主函数执行开始的时候,需要ASSUME CS:CODE,DS:DATA。
注意:以上DS:DATA还不能把数据段和数据段寄存器连接起来,还要
MOV AX,DATA MOV DS,AX
9:汇编语言用带条件的JMP跳转来实现if语句,
10:用:LOOP COMP 来实现循环结构。
,循环结构中用JMP 来跳出循环来实现循环的结束。
11:用CALL SUB1来实现函数调用,函数中要有RET来实现返回主函数。
12:函数调用的参数传递的方法:寄存器,公共变量,地址,堆栈。