第二章 汇编语言与汇编程序2
- 格式:ppt
- 大小:217.50 KB
- 文档页数:73
汇编语言编写程序汇编语言,又称为汇编代码,是一种低级计算机语言,可以直接被计算机硬件执行的指令代码。
编写汇编语言程序需要了解硬件架构和指令集,具备一定的计算机底层知识和程序设计能力。
汇编语言程序可以用于开发底层系统软件、驱动程序、嵌入式系统、嵌入式软件等领域,是实现计算机底层功能的重要工具之一。
本文将介绍如何编写汇编语言程序。
一、汇编语言的基本概念汇编语言是一种符号化指令代码,通过符号代表相应的操作码和操作数,以便于程序员理解和编写。
它基于特定的硬件架构,每一条指令都对应着特定的机器码。
在编写汇编语言程序时,需要了解以下基本概念:1. 寄存器:寄存器是计算机中的一种存储设备,用于暂时保存数据和指令。
不同的硬件架构有不同的寄存器,如通用寄存器、特殊寄存器等。
2. 指令集:指令集是一组机器指令的集合,用于执行特定的操作。
不同的计算机架构有不同的指令集,如x86指令集、ARM指令集等。
3. 标志位:标志位是寄存器中的一组特殊位,用于标识计算机运行状态和指令执行结果。
例如,零标志位用于标识上一次运算结果是否为零。
4. 内存:内存是计算机中的一种存储设备,用于存储程序和数据。
在汇编语言程序中,可以通过内存地址来读写数据。
二、汇编程序的编写步骤编写汇编程序一般可以分为以下几个步骤:1. 确定程序目标和功能:首先需要明确编写程序的目的和功能,根据需求设计算法和数据结构。
2. 编写伪代码:在开始编写实际的汇编代码之前,可以用伪代码的方式描述程序的逻辑流程,以便于理解和规划代码结构。
3. 编写全局变量和常量:根据程序需求,定义全局变量和常量,用于存储程序运行过程中需要的数据。
4. 编写主程序:编写程序的主体部分,包括初始化、输入输出、算法处理等代码。
5. 编写子程序:如果程序需要包含复杂的功能或算法,可以将其封装成子程序,提高代码的可维护性和重用性。
6. 进行调试和测试:编写好汇编程序后,需要进行调试和测试,确保程序的正确性和性能。
汇编语言程序设计(第二版)钱晓捷习题答案第二章(01)2.1(1)AX=1200h(2)AX=0100h(3)AX=4C2Ah(4)AX=3412h(5)AX=4C2Ah(6)AX=7856h(7)AX=65B7h2.2(1) 两操作数类型不匹配(2) IP指令指针禁止用户访问(3) 立即数不允许传给段寄存器(4) 段寄存器之间不允许传送(5) 两操作数类型不匹配(6) 目的操作数应为[ BP ](7) 源操作数应为[BX+DI](8) 立即数不能作目的操作数2.3lea bx,table ;获取table的首地址,BX=200Hmov al,8 ;传送欲转换的数字,AL=8xlat ;转换为格雷码,AL=12H2.4mov ax,8057hpush axmov ax,0f79hpush axpop bx ;bx=0f79hpop [bx] ;DS:[0f79h]=8057h2.6AL=89h CF ZF SF OF PFAL=12h 1 0 0 1 1AL=0afh 0 0 1 0 1AL=0afh 1 0 1 0 1AL=00h 0 1 0 0 1AL=0ffh 0 0 1 0 1AL=00h 0 1 0 0 12.5堆栈是一种按“先进后出”原则存取数据的存储区域。
堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。
2.7W=X+Y+24-Z2.8(1)ADD DX,BX(2)ADD AL,[BX+SI](3)ADD [BX+0B2H],CX(4)ADD WORD PTR [0520H],3412H(5)ADD AL,0A0H2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,Dmov ax,X ;ax=Aimul Y ;dx,ax = A*B (将操作数看作符号数,以下同)mov cx,axmov bx,dx ;bx,ax <-- dx,ax =A*Bmov ax,Z ;ax = Ccwd ;dx,ax =C (扩展符号后为双字)add cx,axadc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+Csub cx,540sbb bx,0 ;bx,cx<-- A*B+C-540mov ax, V ;ax= Dcwd ;dx,ax= D (扩展符号后为双字)sub ax, cxsbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540)idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数2.10;(1)xchg的操作数不能是立即数(2不能对CS直接赋值(3)两个操作数不能都是存储单元(4)堆栈的操作数不能是字节量(5)adc的操作数不能是段寄存器(6)没有确定是字节还是字操作(7)in不支持超过FFH的直接寻址(8)out只能以AL/AX为源操作数第二章(02)2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。
汇编语⾔考试复习资料汇编语⾔期末复习资料整理第⼆章1、寄存器组(1)通⽤寄存器数据寄存器EAX(32位) AX(16位) AH(8位)(⾼位) AL(8位)(低位)累加器EBX(32位) BX(16位) BH(8位)(⾼位) BL(8位)(低位)基址变址ECX(32位) CX(16位) CH(8位)(⾼位)CL(8位)(低位)计数器EDX(32位) DX(16位) DH(8位)(⾼位) DL(8位)(低位)数据指针或变址寄存器ESP(32位) SP(16位)堆栈指针寄存器EBP(32位) BP(16位)基址指针寄存器EDI(32位) DI(16位)⽬的变址寄存器ESI(32位) SI(16位)源变址寄存器(2)专⽤寄存器EIP(32位) IP(16位)指令指针寄存器EFLAGS(32位) FLAGS(16位)标志寄存器ESP (32位) SP(16位)堆栈指针寄存器2、标志位的符号表⽰、3、段寄存器CS(16位)代码段 DS(16位)数据段SS(16位)堆栈段 ES(16位)附加段4、段寄存器和相应存放偏移地址的寄存器之间的默认组合第三章1、七种寻址⽅式(举例)⽴即寻 MOV AX,3069H寄存器寻 MOV AL,BH在内存中的五种寻址直接寻 MOV AX,[2000H]寄存器间接寻 MOV AX,[BX]寄存器相对寻 MOV AX,COUNT[SI] 或者 MOV AX,[SI+COUNT](不推荐) 基址变址寻址 MOV AX,[BP][DI]相对基址变址寻址 MOV AX,MASK[BX][SI]2、指令系统I.数据传送指令(1)通⽤数据传送指令MOV 传送MOVSX 带符号扩展传送⽤源操作数的符号位来填充⽬的操作数的⾼位数据位。
例:MOVSX EAX,CL把CL寄存器中的8位数,符号扩展为32位数,送到EAX寄存器中。
MOVZX 带零扩展传送恒⽤0来填充⽬的操作数的⾼位数据位例:MOVZX DX,AL把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中。
汇编语言和汇编程序汇编语言和汇编程序一、回答下列问题1、何谓汇编语言程序?何谓汇编程序?简述汇编程序的功能。
2、什么叫做变量?变量有哪几种属性?程序中如何放问变量?3、什么叫做标号?标号有哪几种属性?4、8088汇编语言中有哪几类运算符?5、什么叫做表达式?它的运算规则是什么?6、8088/8086汇编语言程序中段的类型有哪几种?段定义中定位类型、组合类型和类别名各有什么作用?7、设VALA EQU 200VALB EQU 30VALC EQU 1BH下列表达式的值各为多少?(1)(VALA*VALC+VALB)/VALC(2)(VALA MOD VALC-VALB/VALC(3)(VALB AND 0FH)OR (VALB XOR 0FH)(4)(VALA GE VALB )AND 0FH8、根据下列数据定义,各条指令单独运行后,AX的内容是什么?TABLEA DW 10 DUP(?)TABLEB DB 10 DUP(?)TABLEC DB ‘1234’TABLED DW 1,2,3,4(1)MOV AX,TYPE TABLEA(2)MOV AX,TYPE TABLEB(3)MOV AX,TYPE TABLEC(4)MOV AX,TYPE TABLED(5)MOV AX,LENGTH TABLEA(6)MOV AX,LENGTH TABLEB(7)MOV AX,LENGTH TABLEC(8)MOV AX,LENGTH TABLED(9)MOV AX,SIZE TABLEA(10)MOV AX,SIZE TABLEB(11)MOV AX,SIZE TABLEC(12)MOV AX,SIZE TABLED9、执行下列指令后,AX寄存器的内容是什么?TABLE DW 0,100,200,300,400DISTA DW 6(1)MOV BX,OFFSET TABLEADD BX,DISTAMOV AX,[BX](2)LEA BX,TABLEMOV AX,2[BX](1)MOV SI,4MOV BX,OFFSET TABLEMOV AX,[BX][SI](2)MOV BX,DISTAMOV AX,TABLE[BX]10、画图说明下列语句分配存储空间及初始化的数据值。
汇编语言程序设计(第二版) 钱晓捷 习题答案第二章(01)2.1(1)AX =1200h(2)AX =0100h(3)AX =4C2Ah(4)AX =3412h(5)AX =4C2Ah(6)AX =7856h7)AX =65B7h ( 2.2(1) 两操作数类型不匹配(2) IP 指令指针禁止用户访问(3) 立即数不允许传给段寄存器(4) 段寄存器之间不允许传送(5) 两操作数类型不匹配(6) 目的操作数应为[ BP ](7) 源操作数应为 [BX+DI](8) 立即数不能作目的操作数2.3lea bx,table ;获取table 的首地址,BX =200Hmov al,8 ;传送欲转换的数字,AL =8xlat ;转换为格雷码,AL =12H2.4堆栈是一种按“先进后出”原则存取数据的存储区域。
堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH 和POP 。
2.5mov ax,8057hpush axmov ax,0f79hpush axpop bx ;bx=0f79hpop [bx] ;DS:[0f79h]=8057h2.6AL=89h CF ZF SF OF PFAL=12h 1 0 0 1 1AL=0afh 0 0 1 0 1AL=0afh 1 0 1 0 1AL=00h 0 1 0 0 1AL=0ffh 0 0 1 0 1AL=00h 0 1 0 0 12.7 W=X+Y+24-Z w w w .k h d a w .c o m 课后答案网2.8(1)ADD DX,BX(2)ADD AL,[BX+SI](3)ADD [BX+0B2H],CX(4)ADD WORD PTR [0520H],3412H(5)ADD AL,0A0H2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=Aimul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,axmov bx,dx ;bx,ax <-- dx,ax =A*Bmov ax,Z ;ax = Ccwd ;dx,ax =C (扩展符号后为双字)add cx,axadc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+Csub cx,540sbb bx,0 ;bx,cx<-- A*B+C-540mov ax, V ;ax= Dcwd ;dx,ax= D (扩展符号后为双字)sub ax, cxsbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540)idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax 存商,dx 存余数2.10;(1)xchg 的操作数不能是立即数(2不能对CS 直接赋值(3)两个操作数不能都是存储单元(4)堆栈的操作数不能是字节量(5)adc 的操作数不能是段寄存器(6)没有确定是字节还是字操作(7)in 不支持超过FFH 的直接寻址(8)out 只能以AL/AX 为源操作数第二章(02)2.11;指令 AX 的值 CF OF SF ZF PF Mov ax,1407h 1470h - - - - - And ax,ax 1470h 0 0 0 0 0 Or ax,ax 1470h 0 0 0 0 0 Xor ax,ax 0 0 0 0 1 1 Not ax 0ffffh - - - - - Test ax,0f0f0h 0ffffh 0 0 1 0 1 注意: 1. mov, not 指令不影响标志位2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。
知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。
十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。
8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。
第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。
(2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。
存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。
eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。
已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。
如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。
数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。
第二章PIC单片机指令系统和汇编语言程序设计2.1 指令系统概述2.1.1 指令的表示方法1.机器指令的表示方法:指令用于规定计算机的基本操作。
一台计算机所能执行的指令集合就是它的指令系统。
指令共有两种表示方法,分别是机器语言表示方法和汇编语言表示方法。
不同种类的单片机有不同的一套命令(即所谓“指令系统”)。
2.汇编语言的表示方法:汇编语言是对机器语言的改进,它采用便于人们记忆的一些符号(例如简化的英文单词)来表示操作码、操作数和地址码等。
通常把表示指令的符号称之为助记符。
3.PIC16F87X单片机指令:PIC16F87X单片机采用精简指令集(RISC)结构,指令效率高,功能强。
它的指令为单字的宽字位(14)指令,由此生成的程序代码短。
指令条数少,仅有35条。
(1)面向字节操作类(2)面向位操作类(3)常数操作和控制类操作。
2.1.2PIC单片机指令的寻址方式1.寄存器间接寻址:所谓寄存器间接寻址指的是通过寄存器F0、F4来实现。
实际的寄存器地址放在F4的低5位中,通过F0来进行间接寻址。
INDF不是物理上实际存在的寄存器,而任何寻址INDF的指令都是以FSR寄存器内容为地址的RAM单元中存放着参加运算或操作的数据。
2.立即数寻址:所谓立即寻址就是操作数在指令中直接给出。
通常把出现在指令中的操作数称之为立即数,因此就把这种寻址方式称之为立即寻址。
3.直接寻址:指令中操作数以其所在存储单元地址的形式给出,就称之为直接寻址。
这种方式是对任何一寄存器直接寻址访问。
4.位寻址:这种寻址方式是对寄存器中的任一位(bit)进行操作。
2.1.3指令符号的意义说明1.PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释2.指令符号的意义说明:在PIC系列单片机指令中常把数据存储器RAM当作寄存器来使用(处理)并用字母f(或F)表示。