当前位置:文档之家› 汇编语言小结

汇编语言小结

汇编语言小结
汇编语言小结

汇编语言复习小结

一、8088/8086的功能结构

1、总线接口单元(BIU)。由指令队列、指令指针(IP)、段寄存器、地址加法器和总线控制逻辑等构成。该单元管理着8088与系统总线的接口,负责CPU对存储器和外设进行访问。

2、执行单元(EU)。由ALU、通用寄存器、地址寄存器、标志寄存器和指令译码逻辑等构成,它负责指令的译码、执行和数据的运算。

3、指令预取(指令队列)。8088的BIU维护着长度为4字节的指令队列,该队列按照“先进先出(FIFO)”的方式进行工作。

二、8088/8086的寄存器结构

8088/8086的寄存器组有8个通用寄存器、4个段寄存器、1个标志寄存器和1个指令指针寄存器,均为16位。分类方法如下:

三、8088/8086的存储器结构

将存储器空间分成许多逻辑段(Segment)来管理。每个存储器单元可以用“段基地址:段内偏移地址”表达其准确的物理位置。

(十六进制)5位物理地址=4位段地址左移1位+偏移地址

小端方式:低字节对低地址、高字节对高地址。

四、为什么能并行执行?

答:执行单元(运算器)和总线接口-指令队列单元这两部分同时工作就是一种并行操作方式,执行单元从指令队列头部获取指令,只要队列不是空的,它就能一直执行无需等待。同一时间内,总线接口单元从内存中读取指令,填入队列尾部,尽量保证队列处于“满”的状态(8086满队列是六条指令)。也就是说,取指令和执行指令并行完成,基本上互不干扰。

五、8088/8086的数据寻址方式

1、立即数寻址方式

2、寄存器寻址方式

3、存储器寻址方式

(1)直接寻址方式

(2)寄存器间接寻址方式

(3)寄存器相对寻址方式

(4)基址变址寻址方式

(5)相对基址变址寻址方式

六、五大类指令分类:

方法一(按指令功能分类):

1、数据传送类指令:

MOV(传送指令)

XCHG(交换指令)

XLAT(换码指令)

PUSH(进栈指令)

POP(出栈指令)

LEA(地址传送指令)

标志操作指令

2、算术运算类指令:

加法指令:ADD ADC INC

减法指令:SUB SBB DEC NEG CMP

符号扩展指令:CBW CWD

乘法指令:MUL IMUL

除法指令:DIV IDIV

十进制调整指令

3、位操作类指令:

逻辑运算指令:AND OR XOR TEST NOT

移位指令:SHL SHR SAL SAR

循环位移指令:ROL ROR RCL RCR

4、控制转移类指令:

无条件转移指令:JMP

条件转移指令:JCC(30条)

循环指令:LOOP LOOPE LOOPNE JCXZ

子程序指令:CALL RET

中断指令和系统调用功能:INT IRET INTO

5、处理器控制类指令

方法二(按操作数的搭配关系分类):

九种合法:

reg mem<——imm

reg mem seg<——reg

reg seg<—— mem

reg mem<——seg

七种不合法:

mem<——mem

seg<——seg

seg<——imm

imm<——均不能

方法三(按如何影响标志位分类):

1、数据传送类指令:

(1)除标志操作指令外,其他均不影响标志位。

(2)标志操作指令可以直接改变CF、DF、IF标志的状态。

2、算术运算类指令:

(1)在加法和减法指令中,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位。

(2)符号扩展指令均不影响标志位。

(3)乘法指令影响标志OF和CF,对其他状态标志没有定义,也就是成为任意,不可预测。(这与对标志没有影响是不同的,没有影响是指不改变原来的状态)(4)除法指令使状态标志没有定义,但是却可能产生溢出。

3、位操作类指令:

(1)逻辑运算指令:AND、OR、XOR、TEST均设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义。NOT不影响标志位。

(2)移位指令:按照移入的位设置进位标志CF,根据移位后的结果影响SF、

ZF、

PF,对AF没有定义。

(3)循环移位指令:按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志。

4、控制转移类指令:均不影响标志,但条件转移指令要利用标志。

七、操作数在指令书写中的规则:

1、两个操作数的字长要一致。

2、目的操作数不能用立即数imm。

3、两个操作数不能同为mem,不能同为seg。

4、十六进制数以字母开头时,需要在前面加0。

5、存储器操作数mem可以是字节、字、双字,类型不确定,需要用PTR说明。

6、绝大部分指令不用seg。(MOV、PUSH、POP除外)

7、绝大部分数据传送类指令不影响标志位,主要是算术运算类指令和位操作类指令影响标志位。

八、DOS功能调用

《汇编语言》段总结

《汇编语言》段总结 我们可以可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元。这完全是我们自己的安排。 “段地址”这个名称中包含着“段”的概念。这种那个说法可能对一些学习者产生了误导【呵呵,曾经有一段时间真的误导了我,有时我禁不住在想为什么会被误导,那是因为我没有真懂。】,使人误以为内存被划分了一个一个的段,每一个段有一个段地址。如果我们在一开始形成了这种认识,将影响以后对汇编语言的深入理解和灵活应用。 其实,内存并没有分段,段的划分来自于CPU,由于8086CPU用“基础地址(段地址x16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。 这就好比水杯,水杯并没有给自己刻度,刻度的划分来自于人类。 我们为什么进行这样的安排?因为这可使得我们可以用分段的方式来管理内存,即为了方便、有序的管理内存。 这就是人类的伟大之处,一个没有生命的东西,如果我们给它一个设定,并对这个设定赋予思想,这个被我们设定的没有生命的东西就会以生命的形式存在。 我们可以用一个段存放数据,将它定义为“数据段”; 我们可以用一个段存放代码,将它定义为“代码段”; 我们可以用一个段当作栈,将它定义为“栈段”; 我们可以这样安排。但若要让CPU按照我们的安排来访问这些段,就要: 对于数据段,将它的段地址放在DS中,用mov、add、sub等访问内存单元的指令时,CPU就将我们定义的数据段中的内容当作数据来访问; 对于代码段,将它的段地址放在CS中,将段中第一条指令的偏移地址放在IP中,这样CPU就将执行我们定义的代码段中的指令; 对于栈段,将它的段地址放在SS中,将栈顶单元的偏移地址放在SP中,这样CPU在需要进行栈操作的时候,比如执行push、pop指令等,就将我们定义的栈段当作栈空间来使用。 其实,CS相当于一个指挥部,负责勘探,作战计划的制定、部署等。即任意时刻,CPU将CS:IP指向的内容当作指令执行。 而DS就相当于一个中转部,负责将CS制定出的计划传达,比如作战人员、物质等。 SS就相当于最终的实际的执行者,因为战场在内存中,SS接收到DS传送的CS制定出的计划,及作战人员、物质等开始作战。 总结:CPU相当于一个作战机构,而内存相当于战地。CS、DS及SS用的是望远镜原理,但这个望远镜带有照相功能,其实质是数字记位法。 可见,不管我们如何安排,CPU将内存中的某段内容当作代码,是因CS:IP指向了那里;CPU将某段内存当作栈,是因为SS:SP指向了那里。 我们一定要清楚,什么是我们的安排,以及如何让CPU按我们的安排行事。要非常清楚CPU的工作机理,才能控制CPU按照我们的安排运行的时候做到游刃有余。

《汇编语言》课程培训心得体会

《汇编语言》课程培训心得体会 各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢 2011年6月17日至19日,本人参加了教育部全国高校教师网络培训中心举办的汇编语言课程培训,曹老师和毛老师所做的精彩讲解,令本人深有感触,有非常大的收获。 汇编语言是计算机专业的一门重要专业课,是很多其他课程的先导课程,比如数据结构、操作系统、编译原理等,一般来说,开设汇编之前学生们之前一般已经学习了至少一门高级语言,比如C 语言。学好汇编语言,能够指导学生们学习和理解计算机系统以及程序设计思想。汇编语言在计算机专业课程中处于重要的地位。 在学习汇编之前,学生没有一点底层编程经验,汇编语言中的内容,学生们基本上都没有概念,尤其对于二本的

学生来说,理解和掌握汇编语言还是比较困难的。这就需要授课教师不断改进自己的教学思想,提高自己的教学水平,以适应学生的需求。 这里,本人很认同曹教授所说的。可以按照学生的类型分班进行教学,这样,对不同的学生可以有不同的要求,做到因材施教,令所有学生都能在课程中有所收获。而不是很多学生觉得课程过难,听不懂,接受不了;另外一些同学又觉得对课程的学习意犹未尽。当然,在大部分学校,现在时机可能还不成熟,需要学校和授课教师改变思路,付出更多。课程中对学生的考核是很重要的,考试成绩应该说是一个比较客观的衡量方式,但又不足以让老师完全学生的情况。除了期末考试之外,平时上课和上机的考查也非常重要。在课堂上,可以用提问和随堂留题目当堂上交的方法来代替点名,这样,在督促学生上课的同时,也掌握了一些学生的学习情况,及时得到学生的反馈。上机的时候,可以

挑选内容让学生讲解或重做,督促学生学习,同时掌握学习情况,分析教学中的问题,以便解决。而实验报告,个人认为,更应该侧重于学生的收获和遇到问题的总结上面,这样可以为改进教学提供素材,同时掌握学生上机的情况。 另外,对于二本院校的学生来说,个人认为教学中需要注意很多问题,教学中不应过于追求难度和广度,而是应该让学生实实在在学到一些知识,激发学生的兴趣,增强学生的信心。需要老师在备课过程中精心准备,要求学生掌握的基本知识应该用不同方式反复强调,教学中重点要突出。汇编中的有些概念,学生是比较难理解的,所以例题要认真挑选,讲解的PPT要更生动形象,便于帮助学生理解。 以上就是这门课程学习后,我的一点不成熟的想法和体会。 梁琦 各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

《汇编语言程序设计》学习心得自主学习报告.doc

自主学习报告书 题目:学习汇编语言程序设计报告学习课程:《汇编语言程序设计》姓名: 专业: 学号: 福建工程学院国脉信息学院教务处制 二○一二年六月

学习汇编语言程序设计报告书 由于实际工作中对汇编语言程序设计应用较多,在业余时间我自主学习了北京大学出版社出版的《汇编语言程序设计》一书。这一本书介绍了80x86汇编语言程序设计的方法和技术,共分为两个部分:第一部分介绍80x86cpu的编程结构,汇编语言程序的格式和伪指令,80x86cpu的寻址方式和指令系统;第二部分深入讨论分支程序、循环程序、子程序基本程序设计方法,以及以中断为主的i/o程序设计,其中包括宏指令、多模块连接技术、汇编语言与高级语言的混合编程、dos和bios提供的常用中断调用,以及文件系统等内容。 通过本书,我深入的掌握了汇编语言的编程方法、思路和技巧,并对计算机的底层编程有一定认识;还对计算机底层运行程序的机制及计算机的工作原理有了深入的了解。 在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言也

是由一个一个的函数组成的。没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和连接就可以了。学习汇编调试,关键就是要掌握DEBUG的运用。汇编程序把汇编语言翻译成机器语言的过程称为汇编。是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。

汇编语言实验报告——累加

《汇编语言》实验报告 ——累加器制作 2014级计算机科学与工程学院 学号: 姓名 一、实验要求: 1.显示 INPUT N :,提示用户输入数字字串 2.检测输入字串的合法性,非法给出提示 3.将输入数字字串转化为数值,存入变量n 4.累加1~n ,存入变量sum 5.以十进制显示sum 二、流程图: 开始 输入 判断是否为回车 判断是否为数字 是 转化为数值,将堆栈中 的高位数字乘10然后与低位数字相加,放入堆 栈 否 显示“error ” 结束 否 是 判断cx=0 否 将CX加到A X中 是 得出sum的值 将结果除以10并将余数存入堆栈,累计位数cx,直至商为0 将堆栈中的数字依次输出显示,直至cx=0

三、源代码: DATAS SEGMENT str1 db "Input N:","$" str2 db "sum=","$" str3 db 0ah,"error","$" n dw 0 sum dw 0 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA dx,str1;输出提示符 mov ah,9 int 21h input: mov ah,01;输入数字 int 21h cmp al,0dh;判断是否为回车 jz step1 cmp al,"0";判断字符合法性 jb error cmp al,"9" ja error sub al,"0";转化为ASCII码 mov ah,0;此段将高位乘10 push ax mov ax,n shl ax,1 push ax mov cl,2 shl ax,cl

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言学习心得

汇编学习心得 08网工(一)班李锐 0804031002 在大三接触汇编语言之前,我们在计算机组成原理课程中就已经有所了解了,但也只是略微明白一些如jmp,mov这样的指令,极度缺乏系统性的学习。 在接触这门课程后,感到汇编语言并不是很容易就可以弄懂的。相比较以前学过的高级语言如C、C++等,电脑等于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。 另外,在C语言中不到10个语句构成的程序,用汇编语言却要好几十行甚至上百行。这不得不让我们对汇编产生一种恐惧感。事实上,这是完全不必要的。一旦对它的原理掌握后,编写程序就容易多了。另外,学习汇编语言能让我们更加了解计算机内部的组织结构,对我们计算机专业的学生来说,学习汇编也是提升综合能力的关键环节。 汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。其中遇到很多新的概念,名字。如寄存器、中断、寻址方式等。这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解,自己亲手编程的方式也就渐渐清晰明了。 我们在学习之前都需要明确什么是汇编语言。计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。 经过一个学期的学习,我也慢慢摸出了汇编学习的规律。 首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,则会起到良好的效果。例如C语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF...THEN...ELSE...),循环结构(FOR...NEXT)三种结构,也通过C 语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。 第二,学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。 指令的种类十分繁杂,但其格式却是统一的。 其中方括号中的内容为可选项。指令助记符决定了指令的功能,对应一条二进制编码的机器指令。指令的操作数个数由该指令确定,可以没有操作数,也可以有

8086汇编语言小结

8086/8088汇编指令小结 一、数据传送指令; 二、算术指令; 三、逻辑指令; 四、串处理指令; 五、控制转移指令; 六、处理机控制指令。 (详情见全文) 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG 交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input) 输入 OUT(Output) 输出 XLAT(Translate) 换码 这组指令只限于使用累加器AX或AL传送信息. .IN 输入指令 长格式为: IN AL,PORT(字节) IN AX,PORT(字) 执行的操作: (AL)<-(PORT)(字节)

(AX)<-(PORT+1,PORT)(字) 短格式为: IN AL,DX(字节) IN AX,DX(字) 执行的操作: AL<-((DX))(字节) AX<-((DX)+1,DX)(字) .OUT 输出指令 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为: OUT DX,AL(字节) OUT DX,AX(字) 执行的操作: ((DX))<-(AL)(字节) ((DX)+1,(DX))<-AX(字) 在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口 号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. .XLAT 换码指令 格式为: XLAT OPR 或: XLAT 执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令 LEA(Load effective address)有效地址送寄存器 LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES .LEA 有效地址送寄存器 格式为: LEA REG,SRC 执行的操作:(REG)<-SRC 指令把源操作数的有效地址送到指定的寄存器中. .LDS 指针送寄存器和DS指令 格式为: LDS REG,SRC 执行的操作:(REG)<-(SRC) (DS)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器. .LES 指针送寄存器和ES指令 格式为: LES REG,SRC 执行的操作: (REG)<-(SRC) (ES)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该

汇编学习心得体会

《汇编语言程序设计》学习心得和体会 在接触这门课程初始,就感到汇编语言并不是很容易就可以弄懂的。相比较以前学过的程序语言如C、C++等,电脑等于在迁就人的思维方式,但汇编却是接近机器语言的一门语言,我们学习和编写程序时必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我学习汇编语言时感受最深的地方,想起来很简单,写起来相当的不易。 汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。其中遇到很多新的概念,名字。如寄存器、中断、寻址方式等。这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解,自己亲手编程的方式也就渐渐清晰明了。 我们在学习之前都需要明确什么是汇编语言。计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。 经过一个学期的学习,我也慢慢摸出了汇编学习的规律。 首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,最重要的是一些思考问题,实现功能的逻辑的思考,会帮助我们很快的找到编写程序的思路和方向。例如C语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF...THEN...ELSE...),循环结构(FOR...NEXT)三种结构,也通过C 语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。 第二,学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。 指令的种类十分繁杂,但其格式却是统一的。 其中方括号中的内容为可选项。指令助记符决定了指令的功能,对应一条二进制编码的机器指令。指令的操作数个数由该指令确定,可以没有操作数,也可以有一个或多个操作数,大多数指令要显示写出来,还有些操作数是隐含的。当指令包含操作数的时候,书写时必须遵守:1、指令助记符和操作数之间有分隔符,比如几个空格;2、如果含有多个操作数,操作数之间用逗号分隔。 现在简单总结汇编语言指令的分类:1、数据传送指令;2、标志位操作指令; 3 、算术运算指令;4、逻辑运算指令;5、移位运算指令;6、位操作指令;7、

汇编语言学习心得

汇编语言学习心得 在接触这门课之前就已对汇编语言有所了解,一方面是在计算机组成原理中有所涉及,虽然那时只知道简单的mov、add、jmp指令,不清楚其具体用法,缺乏系统性的学习;另一方面是在相关书籍中了解到汇编语言写驱动比较好但比较难,当时就觉得汇编是门很牛的语言,很想学习。接触这门课后,感到汇编语言的确不是很容易就可以弄懂的,相比较以前学过的高级语言如C、C++等,电脑等于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。通过这一学期的学习,对汇编有了初步的掌握,可以说是汇编的入门教程。 在接触汇编语言的时候,对汇编的第一印象就是觉得这种语言非常繁琐和松散,里面有很多细小的知识点,而且有很多规定,必须要根据严格的规则来编写才能够写出正确的程序,譬如一些指令的具体作用,如XLAT指令、CWB指令、LEA指令、OFFSET等的含义和功能,还有大于、小于、等于指令的写法都要记住,不能像高级语言里面用符号“<> =”就能够实现了,正是汇编中的这些规则让我觉得汇编真是特别繁琐,所以在刚刚开始学习汇编的时候经常觉得有些不知所措,特别是对于几种寻址方式,还有各个段的功能,以及各种寄存器的作用都觉得学的很混乱,虽然老师在上课时说的都很详细了,但是在当时好像听懂了,但是很快又弄不清了,还有一些指令的用法会很快就忘记,或者是记混了,但是慢慢接触多了,特别是在做实验的之后,学习得很快,因为要是把学过的知识具体应用到现实中,对于知识的掌握要求就更深一步了,在实验过程中,发现了很多问题,例如一些寻址方式的应用,字符串的定义末尾要加上$符号,在利用AX、BX、CX、DX这几个寄存器的时候注意考虑PUSH进栈对数据进行保护,通过在实验中不断出现错误并改正,对汇编语言的掌握和使用能力都有所提高了。 刚开始对汇编的最大感觉就是觉得用起来很麻烦,不像高级语言那么随意,寄存器就那么几个,用的时候要好好利用,而且还要考虑到计算机内部的工作情况,特别是数据在内存中的存储情况,但是经过学习,发现汇编语言对我们学习好其他语言是非常有用的,原来在C语言中一直不是非常清楚的数据和地址的区别也通过学习汇编而了解得很清楚,通过汇编对CPU里面的工作情况也有了一定的认识,写有些指令的时候要考虑到CPU里面的标志位的改变和利用标志位来实

汇编程序调试实验报告

微机原理与接口技术 作 业 班级: 目录 一、........................................................... 实验目的:2 二、............................................................. 实验环境2 三、............................................................. 实验过程3 (一)................................................. 基础知识储备3

(二)............................................. 汇编语言程序设计3

(三)汇编程序调试 (3) 四、............................................................. 调试实例4 (一)....................................................... 实例一4 (二)....................................................... 实例二6 (三)....................................................... 实例三9 (四)....................................................... 实例四12五、............................................................. 实验总结15 (一)..................................................... 实验收获15 (二)..................................................... 实验感悟16 一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标 代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MAS汇编语言及其程序设计方法。 、实验环境 EDIT编辑器、MASME编程序、LINK连接程序、TD调试程序

汇编语言溢出小结

汇编语言溢出小结 汇编溢出使用总结如下: 执行加法指令ADD: OF标志位根据操作数的符号及其变化情况来设置:若两个操作数的符号相同,而结果的符号与之相反时,OF=1,否则OF=0。溢出位既然是根据数的符号及其变化来设置的,当然他使用来表示带符号数的溢出的。 执行减法指令SUB: 减法的OF位的设置方法为:若两个数的符号相反,而结果的符号与减数的符号相同,则OF=1,除上述情况外OF=0。OF=1说明带符号数的减法运算结果是错误的。 求补运算指令NEG: NEG指令的条件码按求补后的结果设置,只有当操作数为0时,求补运算结果使CF=0,其他情况均为CF=1.所以,只有当字节运算时对-128求补,以及字运算时对-32768求补和双字运算时对-2的31次方求补的情况下OF=1,其他则OF=0。 无符号乘法指令MUL: 对于MUL指令,如果乘积的高一半为0,几字节操作的(AH)或字操作的(DX)或双字的(EDX)为0,则CF位和OF位均为0;否则,均为1. 带符号数乘法指令IMUL: 对于IMUL指令,如果乘积的高一半是低一半的符号扩展,则CF位和OF位均为0,否则为1. 除法指令: 除法指令对所有条件码位均无定义。但是需要注意一个问题,如果字节

操作时,被除数的高8位的绝对值》除数的绝对值;或者字操作时,被除数的高16为绝对值》除数的绝对值,则商就会产生溢出。在8086系统中,这种溢出是由系统直接转入0型中断处理的。为避免这种情况,必要时程序应进行溢出判断及处理。 逻辑运算指令: AND,OR,NOT,XOR,TESTT中,NOT不影响标志位,其他4种指令将使CF位和OF位为0. 移位指令: OF位只有当移位次数CNT=1时,即移动一位的时候才是有效的,否则该位无定义。当CNT=1时,在移位后最高有效位的值发生变化时(原来为0,移位后为1;或原来为1,移位后为0)OF=1,否则值为0. 串处理指令: MOVS,LODS,STOS,INS,OUTS不影响标志位。转移指令: 所有条件转移指令都不影响条件码,JMP也不影响条件码。 循环指令: 不影响条件码。 子程序: CALL和RET都不影响条件码。 判断运算结果是否溢出的一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出,此时的运算结果显然不正确。其他情况下,则不会产生溢出。 两个正数相加(或一个正数减一个负数)得到负数,或是两个负数相加得到

《汇编语言程序设计》学习总结与心得

《汇编语言程序设计》学习总结与心得 其实说实话在学这门课之前自己对汇编语言一点都不了解,只知道它也是一种语言,而且是一门很少用的语言,可能很多人都是这么想的,或许在学这门课之前不少同学也有和我当初一样的思想,大概学学就好,反正以后很少能用到,毕竟现在高级语言这么发达,而且运用起来灵活易懂,像汇编这种低级语言又难又不易学。或许老师是知道我们之前有这种想法,所以第一节课就跟我们讲解了一下了汇编语言在当今这种高速发展的社会的作用和地位,让我们能够正确的认识汇编语言的精华,正确对待这么课。而且还在课堂了百度了汇编语言的招聘信息,或许这才是使我们正确对待汇编的最直接的原因,关系到我们以后的出路,或许我们学好了一门汇编,以后出去找工作的机会不就更广了吗?正是在这种动力的驱使下我才对汇编语言有了一个新的认识,而且决定要把它学好。 在后来的学习中我发现其实汇编不是很难学,其实学汇编就像学其他的高级语言一样,高级语言要求对语言非常了解。在学汇编的过程中,我们最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样我们在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言不也是由一个一个的函数组成的吗?没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。在初次接触汇编的几个汇编工具时,有一种神奇的感觉,因为汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

汇编实验心得

实验1 DOS操作基础 初次接触汇编的上机实验,感觉挺神奇的,感觉接触到了计算机里基础的东西,都是以前没见过的,有一些能够查询目录的指令,比如dir(目录显示指令)、type(显示文件内容命令)等等。可能是自己太安于计算机的基础的常规操作,都没去发现它还有这么多的值得发现的东西。 实验二汇编初体验 第一次在DOS环境下运行汇编程序,接触到了一些内部可以调用的程序比如MASM.EXE、ASM.EXE、LINK.EXE等等。还了解了debug下命令的一些用法,比如D(Dump)显示指定内存单元内容G(GO)运行命令,T(Trace)执行一条语句等等。 实验三DEBUG使用 这次实验课详细地介绍了debug的使用方法。主要用到的D,T,U。要多多上机才能学得更好。 实验四内存操作数及寻址方法 掌握了8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。 8088指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。通过反复的操作熟练的掌握了debug的一些用法。对于寄存器还有一

些疑惑的地方,还得好好研究。 实验五数据串传送和查表程序 知道了MOV指令还有循环指令loop的用法。还有堆和栈指示器和堆栈操作指令push和POP。不过还是不太熟。 实验八显示十进制整数 这一次的实验,运用了更多的指令算法,课程脱节的问题也更明显地暴露出来,没有抓住核心的我走了不少弯路,但是只要用心,又有老师指导,还是能完成本次实验,并且先于理论课程学到了更新的知识。(抄的百度) 实验九方程求解 初次接触汇编语言的分支结构。用到了JMP指令。这当然和之前学的C语言的思想是一样的,发现思想实现起来还是很不容易的,多加练习。 实验十五中断服务程序 通过本次试验熟悉了汇编语言宏程序设计;了解了中断服务子程序的编写,其中应注意恢复原中断指令,将ds重新指向数据段。 (抄的百度)

汇编课程设计心得体会

汇编课程设计心得体会 篇一:课程设计心得体会 课程设计心得体会(通用) 通过此次课程设计,使我更加扎实的掌握了有关~~~~~~~方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。 过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一

定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可! 课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了~~~~~的识别和测试;熟悉了~~~~~~~;了解了~~~~~~~方法;以及如何提高~~~~~~的性能等等,掌握了~~~~~的方法和技术,通过查询资料,也了解了~~~~~~~原理。 我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学

汇编语言复习重点总结版

1.通用数据传送指令 MOV——传送指令 指令格式:MOV DST,SRC ;(DST)←(SRC)。DST表示目的操作数, SRC表示源操作数 说明:①.DST为除CS外的各寄存器寻址方式或任意存储器寻址方式。SRC为任意数据寻址方式。 ②.DST、SRC不能同时为存储器寻址方式,也不能同时为段寄存器寻址方 式,而且在DST为段寄存器时,SRC不能为立即数。 ③.MOV指令不影响标志位。 2.地址传送指令 (1).LEA——有效地址(EA)送寄存器指令 指令格式:LEA REG,SRC ;(REG)←SRC 说明:①.指令把源操作数(只能是存储器寻址方式)指定的有效地址送到指令指定的16位或32位寄存器(REG)中(但不能是段寄存器)。 ②.LEA指令不影响标志位。 3.加法指令 (1).ADD——加法指令 指令格式:ADD DST,SRC ;(DST)←(DST)+( SRC) 4.减法指令 (1).SUB——减法指令 指令格式:SUB DST,SRC ;(DST)←(DST) - (SRC) (2).SBB——带借位减法指令 指令格式:SBB DST,SRC ;(DST)←(DST) - (SRC) - CF 5.除法指令 (1).DIV——无符号数除法指令 指令格式:DIV SRC ;字节操作:(AL)←(AX)/(SRC),(AH)←(AX)%(SRC) 字操作:(AX)←(DX,AX)/(SRC),(DX)← (DX,AX)%(SRC) 双字操作:(EAX)←(EDX,EAX)/(SRC),(EDX)← (EDX,EAX)%(SRC) 6.逻辑运算指令:可以对双字、字或字节执行按位的逻辑运算。 (1).AND——逻辑与指令 指令格式:AND DST,SRC ;(DST)←(DST)∧(SRC) (2).OR——逻辑或指令 指令格式:OR DST,SRC ;(DST)←(DST)∨(SRC) (3).XOR——逻辑异或指令 指令格式:XOR DST,SRC ;(DST)←(DST)⊕(SRC) (4).PUSH——进栈指令 指令格式:PUSH SRC;16位指令:(SP)←(SP) –2 ((SP)+1,(SP))←(SRC) 32位指令:(ESP)←(ESP) –4 ((ESP)+3, (ESP)+2, (ESP)+1, (ESP))←(SRC) 说明:①.堆栈:计算机开辟的以“后进先出”方式工作的存储区。它必须存在于

相关主题
文本预览
相关文档 最新文档