汇编语言程序设计——知识点-v3.0
汇编语言知识点概括
![汇编语言知识点概括](https://img.taocdn.com/s3/m/9c59a2134431b90d6c85c740.png)
汇编语言复习辅导第三章8086指令系统和寻址方式应掌握编写一个完整的汇编语言程序所必需的知识及其相应概念:(1)汇编语言程序的格式(2)常用伪指令(伪操作)(3)8086寻址方式(4)8086指令系统1 汇编语言程序格式. 80x86的逻辑段:堆栈段、数据段、附加段、代码段(1) 完整段定义;- - - - - - - - - - - - - - - - - - - - - - -STSEG SEGMENT ;定义堆栈段DB 64 DUP(?)STSEG ENDS;- - - - - - - - - - - - - - - - - - - - - - -DTSEG SEGMENT ;定义数据段DA TA1 DB 36HDA TA2 DB 4BHSUM DB ?DTSEG ENDS;- - - - - - - - - - - - - - - - - - - - - - - CDSEG SEGMENT ;定义代码段MAIN PROC FAR A SSUME CS:CDSEG,DS:DTSEG,SS:STSEG START: MOV AX,DTSEG MOV DS,AX ;设置数据段地址MOV AL,DA TA1 ;用户程序MOV BL,DATA2ADD AL,BL MOV SUM,ALMOV AH,4CH ;返回DOSINT 21HMAIN ENDPCDSEG ENDSEND START ;汇编结束(2) 简化段格式:·MODEL SMALL ;存储模型·STACK 100H ;定义堆栈段及大小·DATA ;定义数据段V AR1 DB ?·CODE ;定义代码段MAIN PROC FAR ;定义过程START: MOV DX,@DA TA ;设置数据段MOV DS,AX ; 地址…MOV AX,4COOH ;返回DOSINT 21HMAIN ENDP ;过程结束END START ;汇编结束2. 常用伪操作(1) 程序结构伪操作段定义伪操作: 段名SEGMENT……段名ENDS过程定义伪操作: 过程名PROC [NEAR/FAR]……过程名ENDP程序开始和结束伪操作: TITLE 程序名---- 程序说明(<60个ASCII字符)END [START]段分配伪操作:ASSUME CS:代码段名, DS:数据段名ASSUME SS:堆栈段名, ES:附加段名(2) 数据类型及数据定义伪操作•ORG 指定数据的存储地址或代码段的起始地址例: ORG 100H 例: ORG 100HDA TA1 DB 100 START: MOV AX,BX•DB 定义字节, 其后的数据存储在一个字节中•DW 定义字, 对其后的数据分配2个字节,数据的低8位存放在低字节,高8位存放在高字节; List File for DD Examples00A0 ORG 00A0H00A0 FF030000 DATA13 DD 102300A4 5C960800 DATA14 DD 10001001011001011100B00A8 F2572A5C DATA15 DD 5C2A57F2H00AC 23000000 89470300 DATA16 DD 23H,34789H,65533FDFF0000•DQ 定义4字, 为数据分配8个字节单元•DT 定义5字, 为压缩的BCD数据分配存储单元例如: DATA DQ 1122334455667788HDATB DT ?•DUP 按照给定的次数来复制某个(某些)操作数例如: DATC DW 32 DUP ( ? )DATD DB 5 DUP ( 0, 8 DUP (1) )•EQU 赋值伪操作•=COUNT EQU 25COUNTER DB COUNTMOV AH, COUNTTEMP = 25MOV AH, TEMPTEMP = TEMP+1MOV AL, TEMP(3) 属性伪操作•PTR 指定操作数的类型属性MOV AX, WORD PTR DA TBMOV BL, BYTE PTR DA TW•LABEL 定义变量或标号的类型属性B_DAT LABEL BYTEW_DAT DW 50 DUP(?)3. 8086寻址方式寻址方式--指令中表示操作数地址的方式, 学习时要注意:(1) 正确书写各种寻址方式的汇编格式(2) 清楚各种寻址方式所指定的操作数或操作数地址在何处?( 指令中/ 寄存器中/ 存储器单元中)(3) 各种存储器寻址方式是如何形成操作数的物理地址的?(段寄存器/ 基址、变址寄存器/ 偏移量的组合关系)(4)各种寻址方式限定使用的寄存器<1> 与数据有关的寻址方式小结寻址方式操作数地址(PA) 指令格式举例立即寻址操作数由指令给出MOVDX, 100H ;(DX)←100H寄存器寻址操作数在寄存器中ADD AX, BX ;(AX)←(AX)+(BX) 直接寻址操作数的有效地址由指令直接给出MOV AX, [100] ;(AX)←(100)MOV AX,V AR ;(AX)←(V AR)寄存器间接PA=(DS)×16+(BX)或(SI)或(DI)PA=(SS) ×16+(BP) MOV AX, [BX]; (AX)←((DS)×16+(BX))寄存器PA=(DS)×16+(BX)或(SI)或(DI)+位移量相对寻址PA=(SS) ×16+(BP)+位移量MOV AL, MESS[SI];(AL)←((DS)×16+(SI)+OFFSET MESS)基址变址PA=(DS)×16+(BX)+(SI)或(DI)PA=(SS) ×16+(BP) +(SI)或(DI) MOV AX, [BX+DI];(AX)←((DS)×16+(BX)+(DI))相对基址PA=(DS)×16+(BX)+(SI)或(DI)+位移量变址寻址PA=(SS) ×16+(BP) +(SI)或(DI)+位移量MOV AX, BUFF(BX+DI) ;(AX)←((DS)×16+(BX)+(DI)+OFFSET BUFF)<2> 与转移地址有关的寻址方式用来确定转移指令及CALL指令的转向地址。
汇编语言知识点
![汇编语言知识点](https://img.taocdn.com/s3/m/ae63e440df80d4d8d15abe23482fb4daa58d1d24.png)
汇编语言知识点汇编语言(Assembly Language)是一种低级程序设计语言,与机器语言密切相关,用于编写计算机程序。
它通过使用助记符(mnemonics)来代替二进制指令,使程序更易于阅读和编写。
本文将介绍一些汇编语言的基本知识点。
一、汇编语言的基本概念汇编语言是一种面向机器的编程语言,它直接运行在计算机的硬件上。
它使用一系列助记符来代表不同的指令和操作码,这些助记符对应着机器语言指令的二进制表示。
1.1. 寄存器寄存器是汇编语言中最基本的组成部分,它们用于保存数据和执行运算。
不同的计算机体系结构和处理器有不同的寄存器,但一般会包括通用寄存器、指针寄存器、标志寄存器等。
1.2. 指令和操作码汇编语言提供了一系列指令和操作码,用于执行各种操作。
指令可以是数据传输、算术运算、逻辑运算等操作,而操作码则是指令的二进制表示。
1.3. 内存汇编语言中,数据和指令都存储在内存中。
程序可以通过读写内存来操作数据和执行指令。
1.4. 标志位标志位是一组二进制位,用来记录计算机的状态和执行结果。
比如,标志位可以记录运算结果是否为零、是否产生进位等。
二、汇编语言的基本语法汇编语言的语法规则相对简单,但需要遵循一定的格式和规范。
2.1. 指令格式汇编指令一般由助记符、操作数和注释构成。
助记符表示执行的操作,操作数指定参与操作的数据,而注释用于解释指令的作用。
2.2. 伪指令伪指令是一类在汇编程序中使用的指令,它们不被计算机执行,而是由编译器或汇编器来处理。
伪指令可以用于声明变量、定义常量、分配内存等。
2.3. 标号标号是汇编程序中的一个重要概念,它用于标记特定的位置。
标号通常用来表示程序的入口点、循环语句的起始点等。
2.4. 注释注释是对汇编程序的解释和说明,它们对程序的执行没有影响。
注释可以用于提供程序的说明、变量的含义等信息。
三、汇编语言的常用指令汇编语言提供了丰富的指令集,用于执行各种操作。
下面是一些常用的指令:3.1. 数据传送指令数据传送指令用于将数据从一个位置复制到另一个位置。
汇编语言程序设计第1章汇编语言基础知识PPT课件
![汇编语言程序设计第1章汇编语言基础知识PPT课件](https://img.taocdn.com/s3/m/00ba5ece551810a6f52486dd.png)
2018/12/11
第1章
汇编语言基础知识
17
《汇编语言程序设计》
词汇表
23.数据段 数据段存放当前运行程序所用的数据,数据段的段地址存放在 DS中。 24.附加段 附加段是附加的数据段,也用于数据的保存,另外,串操作指令 将附加段作为其目的操作数的存放区域。附加段的段地址存放在ES中。 25.堆栈段 堆栈段是堆栈所在的主存区域,堆栈段的段地址存放在SS中,堆 栈指针寄存器SP指示堆栈栈顶的偏移地址,处理器利用SS:SP操作堆 栈中的数据。
2018/12/11
第1章
汇编语言基础知识
16
《汇编语言程序设计》
词汇表
21.物理地址 在1M字节的存储器里,每一个存储单元都有一个唯 一的20位地址,称为该存储单元的物理地址,把段地址左 移4位再加上偏移地址就形成物理地址。 22.代码段 程序员在编制程序时要把存储器划分成段,代码段用 来存放程序的指令序列,代码段的段地址存放在CS中,指 令指针寄存器IP指示代码段中指令的偏移地址,处理器利 用CS:IP取得下一条要执行的指令。
词汇表
2.汇编语言 汇编语言是一种符号语言,几乎和机 器语言一一对应,它采用便于记忆、并能 描述指令功能的符号来表示机器指令,比 机器语言容易理解和掌握。
2018/12/11
第1章
汇编语言基础知识
6
《汇编语言程序设计》
词汇表
3.汇编语言源程序 用汇编语言编写的程序称为汇编语言 源程序,简称源程序。
2018/12/11
第1章 汇编语言基础知识
19
《汇编语言程序设计》
词汇表
29.子程序 子程序又称为过程,它相当于高级语言中的过程和函数。在一个 程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结 构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段 写成子程序形式,以便需要时可以调用它;某些常用的特定功能的程 序段也可编制成子程序的形式供用户使用。 30.中断 中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操 作,这些引起中断的事件称为中断源,它们可能是来自外设的输入输 出请求,也可能是计算机的一些异常事故或其它内部原因。
汇编语言程序设计第1章基础知识
![汇编语言程序设计第1章基础知识](https://img.taocdn.com/s3/m/c06b954278563c1ec5da50e2524de518974bd349.png)
1.1.1 机器语言
计算机能够直接识别的数据是由二进制数0 和1组成的代码。机器指令就是用二进制代码组 成的指令,一条机器指令控制计算机完成一个基 本操作。
用机器语言编写的程序是计算机惟一能够 直接识别并执行的程序,而用其他语言编写的程 序必须经过翻译才能变换成机器语言程序,所以, 机器语言程序被称为目标程序。
第1章 基础知识
1.1.3 高级语言
汇编语言虽然较机器语言直观,但仍然烦 琐难懂。于是人们研制出了高级程序设计语言。 高级程序设计语言接近于人类自然语言的语法习 惯,与计算机硬件无关,易被用户掌握和使用。
目前广泛应用的高级语言有多种,如 BASIC、FORTRAN、PASCAL、C、C++等等。
第1章 基础知识
第1章 基础知识
1.3.3 标志寄存器
8086CPU中有一个很重要的16位标志寄存器,它 包含9个标志位,主要用于保存一条指令执行后, CPU所处状态信息及运算结果的特征。
1.条件标志 2.状态控制标志
第1章 基础知识
1.条件标志
(1)进位标志CF (2)零标志ZF (3)符号标志SF (4)溢出标志 OF (5)奇偶标志 PF (6)辅助进位标志AF
Intel 8086CPU内部结构 8086寄存器组 标志1.3.1 Intel 8086CPU内部结构
图1.2 8086CPU内部结构
图1.2 8086CPU内部结构
返回本节
1.3 8086CPU
第1章 基础知识
1.3.2 8086寄存器组
图
寄 存 器 分 组
1.1.4 汇编语言的特点
(1)汇编语言与处理器密切相关。 (2)汇编语言程序效率高。 (3)编写汇编语言源程序比编写高级语言源程 序烦琐。 (4)调试汇编语言程序比调试高级语言程序困 难。
汇编语言重点知识总结
![汇编语言重点知识总结](https://img.taocdn.com/s3/m/7ef2157030126edb6f1aff00bed5b9f3f80f726d.png)
汇编语言重点知识总结汇编语言是一种低级程序设计语言,它直接操作计算机硬件资源,具有较高的执行效率和灵活性。
本文将重点总结汇编语言的相关知识,涵盖指令集、寻址模式、数据传送和运算、控制流等方面。
一、指令集1. 数据传送指令:包括MOV、LEA等指令,用于在寄存器和内存之间传输数据。
2. 算术运算指令:包括ADD、SUB、MUL、DIV等指令,用于进行加减乘除等数值运算。
3. 逻辑运算指令:包括AND、OR、NOT等指令,用于进行逻辑与、逻辑或、逻辑非等操作。
4. 跳转指令:包括JMP、JZ、JE等指令,用于实现程序的跳转和条件判断。
5. 栈操作指令:包括PUSH、POP等指令,用于实现数据的入栈和出栈操作。
6. 串操作指令:包括MOVSB、CMPSB等指令,用于字符串的复制、比较等操作。
二、寻址模式1. 直接寻址:使用给定的地址访问内存中的数据,如MOV AX, [1234H]。
2. 寄存器间接寻址:使用寄存器中存储的地址访问内存中的数据,如MOV BX, [SI]。
3. 寄存器相对寻址:使用寄存器和偏移量的组合访问内存中的数据,如MOV CX, [BX+DI]。
4. 基址变址寻址:使用基址寄存器和变址寄存器的组合访问内存中的数据,如MOV AX, [BX+SI+10H]。
5. 相对基址变址寻址:使用基址寄存器、变址寄存器和偏移量的组合访问内存中的数据,如MOV AX, [BX+SI+10H+DI]。
三、数据传送和运算1. 数据传送:使用MOV指令将数据从一个位置传送到另一个位置,如MOV AX, BX。
2. 位操作:使用AND、OR、XOR等指令进行位与、位或、位异或等操作。
3. 算术运算:使用ADD、SUB、MUL、DIV等指令进行加减乘除等运算。
4. 位移操作:使用SHL、SHR、ROL、ROR等指令进行位左移、位右移、循环左移、循环右移等操作。
四、控制流1. 无条件跳转:使用JMP指令无条件跳转到指定的地址。
汇编语言程序设计
![汇编语言程序设计](https://img.taocdn.com/s3/m/24cf1fd90342a8956bec0975f46527d3250ca652.png)
第四章汇编语言程序设计(assembly languageprogramming)§4.1 汇编语言(assembly language)一.概述汇编语言:一种符号语言,它用助记符表示指令的操作码和操作数,用标号或符号代表地址、常量和变量,与机器语言几乎一一对应汇编语言程序:用汇编语言编写的程序汇编:把汇编语言源程序翻译成机器语言目标程序的过程汇编语言源程序手工汇编或汇编程序机器语言目标程序汇编程序:用来完成汇编工作的程序,有小汇编ASM宏汇编MASM动态调试程序DEBUG二.汇编语言的语句格式: [名称] 指令助记符 [操作数] [;注释]带方括号的项有时可没有,注释项完全可以没有每个部分用空格分开每行最多可有132个字符,但最好不要超过屏宽80语句可分成指令性语句和指示性语句(伪指令语句)指令性语句汇编后可生成机器码[标号:] 指令助记符 [操作数] [;注释]指示性语句指示汇编程序处理一些工作[名称] 伪指令(指示符) [操作数] [;注释]1.名称(或称标识符)给指令或存储单元地址起的名字,由字母、数字、字符组成字母:A~Z ,a~z数字:0~9字符:可打印+-*/=()[]〈〉;.' ’ ,_:?@$&(非打印空格制表符TAB 回车换行)(界符:,;:.()[]〈〉+-*/=?_@&$' ’界符用来表示某个标志的结束)数字不能作名称的第一个字符,圆点.仅能作第一个字符保留字不能作标识符($、?是保留字,与其它字符组合除外)名称最长为31个字符当名称后跟冒号,表示该名称是其后指令的标号,代表该指令的开始地址,其他指令可以用该标号作为转移地址当名称不跟冒号,它可能是标号或变量名,伪指令前的名称不跟冒号冒号隐含NEAR属性,例:供段内调用写成 OUTPUT:OUT DX ,AL供段间调用写成 OUTPUT OUT DX ,AL2.指令助记符8086/8088指令,也可以是伪指令,如果指令有前缀(LOCK、REP等)则前缀和指令用空格分开3.操作数指令执行的对象,可能有一、二个或没有名称指令助记符操作数注释RET ;返回(无操作数)COUNT: INC CX ;CX加1(1个操作数)MOV AL,BL ;ALBL(2个操作数)伪指令可有多个操作数COST DB 3,4,5,6,7,8 ;(6个操作数,用逗号分开)操作数可以是常数、寄存器名、标号、变量、表达式,MOV AX,[BP+4];(第二个操作数为表达式)4.注释可选项,使程序易读,汇编时不作处理注释前面要加分号,它可位于操作数之后,也可位于行首三.常量与变量1.常量,也叫常数,没有属性的纯数,汇编时已确定的值·数字常量为0~65535中的数(16位寄存器使用,伪操作可定义32位),进制加后缀说明,十进制加D(可省),二进制加B,八进制加Q,十六进制加H,若十六进制第一位为字母,则前头应加0·字符和字符串叫串常量,是ASCII码字符串,必须加单(或双)引号例:‘A’,“ABC”,汇编后变成41H,414243H2.变量,用于表达数值(或串)的标识符,有三个属性① 段属性(SEGMENT)② 偏移地址属性(OFFSET)③ 类型属性(TYPE),用DB、DW、DD定义§4.2 伪指令(pseudo-instruction)一.符号定义伪指令1.等值EQU格式:符号名 EQU 表达式用来给符号定义一个值,程序中出现该符号就用其值代替,EQU只能定义一次DATA EQU 1234 ;代表一个数XYZ EQU ALPHA[SI] ;代表一个地址2.等号 =格式:符号名 = 表达式意义与EQU一样,但程序中可重新定义符号的值EMP = 6 ;EMP代表6EMP =EMP + 1 ;EMP现在代表73.解除PURGE格式:PURGE 符号名(符号1,符号2,……,符号n)用于解除所定义的符号使该符号在以后的定义中有效例:原定义 TAB EQU 5可用 PURGE TAB 来解除然后可重新定义 TAB EQU 10二.数据定义伪指令用于预置存储器或定义变量1.定义字节DB格式:[变量名称] DB 表达式例:DATA1 DB 2,3,4,5;从DATA1单元开始存放4字节数据2.定义字DW格式:[变量名称] DW 表达式例:TAB DW 1234H;TAB单元内容为34H,TAB+1单元内容为12H 3.定义双字DD格式:[变量名称] DD 表达式每个数据二字(四字节)低位部分在低地址,高位部分在高地址·用DB/DW/DD定义的数每行不得超过16项,超过16项必须换行DB/DW/DD用法<1> SUM DB ? ;给SUM单元分配一个字节,内容未定<2> TAB DB 20 DUP(0);给TAB开始单元分配20字节,内容为0<3> TIME DW 100 DUP(?);给TIME开始单元分配100字,内容未定<4> ADDR DD TABLE ;TABLE的地址(双字)给ADDR例:DATA SEGMENTORG 100HTABLE DB 1,2,3,4ADDR DD TABLEDATA ENDS假设汇编后DS=13A2H(如果ADDR用DW定义,只得偏移量)(如果TABLE是变量,ADDR得地址,是常量,ADDR得数值)<5> LETTER DB ‘ABCDEFG’;将字符串以ASCII码形式填入LETTER开始的内存<6> HIS DB 3 DUP(‘WELCOME!’,0DH,0AH);从HIS单元开始重复3次存放WELCOME!和回车换行符4.标号LABEL格式:标号名 LEBEL 类型标号用于说明可执行代码在汇编语言程序中的位置,即符号地址,供调用和转移之用标号有三个属性段属性偏移量属性距离属性(即格式中的类型):NEAR(近程)和FAR(远程)NEAR:本标号为段内标号,调用本标号只提供偏移地址,段基址为当前代码段FAR:本标号为段间标号,调用本标号提供偏移地址和段基址一个具有NEAR属性的标号也可用标号加冒号作后缀,并排列在代码行的开头来隐含如 AGAIN LABEL NEARXOR AX,BUFF[BX]可写成 AGAIN:XOR AX,BUFF[BX]例:ROOT LABEL NEAR ;以下程序所用的ROOT标号是段内属性COMP PROC NEAR ;以下程序所用的过程下的标号是段内属性TIME PROC FAR ;以下程序所用的过程下的标号是段间属性三.运算符1.算术运算符+、-、*、/、MOD即加、减、乘、除、除法取余数(如19 MOD 7=5)操作数是数字,结果也是数字存储器地址运算时只有加减,例TAB+2、BETA-5等2.逻辑运算符AND、OR、XOR、NOT即与、或、异或、非操作数是数字,结果也是数字例:AND BX,DAT AND 0FEH3.关系算符EQ、NE、LT、GT、LE、GE即相等、不等、小于、大于、小于等于、大于等于若关系是假结果为0,若关系是真结果为0FFFFH例:MOV BX,PAD LT 3则PAD的值小于3时,汇编成MOV BX,0FFFFH否则,汇编成MOV BX,04.分析运算符可把存储器操作数分解成它的组成部分,如段值、段内偏移量、类型5.合成算符由已存在的存储器操作数生成一个段值与偏移量相同,而类型不同的新的存储器操作数以下讨论分析算符和合成算符1.取段基址SEG它加于一个变量或标号之前,回送段基址,例:ASSUME CS:SEG BEGIN ;令CS为BEGIN程序段段基址MOV AX,SEG VARN ;将VARN的段基址送AX2.取偏移量OFFSET它加于一个变量或标号之前,取其偏移量,例:MOV BX,OFFSET SUM ;将SUM的段内偏移量存入BX3.取类型码TYPE它加于一个变量或标号之前,取其类型代码DB DW DD DQ DT NEAR FAR1 2 4 8 10 -1 -2例:NG1 DB ‘A’,‘D’,3NG2 DW 88,265……MOV AL,TYPE NG1 ;NG1定义字节,AL 1MOV AL,TYPE NG2 ;NG2定义字,AL 24.取长度LENGTH它加于一个变量之前,取分配给变量的项数例:TAB DB 150 DUP(?);150项,150字节FUM DW 150 DUP(?);150项,300字节则,MOV CX,LENGTH TAB ;CX 150MOV AX,LENGTH FUM ;AX 150·注意:LENGTH返回的存储区必须用DUP()来定义,否则返回为1 5.取字节数SIZE它加于一个变量之前,取回变量所占字节总数,有SIZE = LENGTH * TYPE由上例,LENGTH TAB = 150,TYPE TAB = 1LENGTH FUM = 150,TYPE FUM = 2可知: SIZE TAB = 150SIZE FUM = 300以上5个叫数值返回算符6.类型指示PTR格式:类型 PTR 地址表达式表示PTR右边的(存储器)操作数是左边的类型,有:BYTE、WORD、DWORD、NEAR、FAR例:INC BYTE PTR [BX] ;将BX指向的单元字节加1MOV WORD PTR [DI],99 ;立即数99送DI指向的字中JMP NEAR PTR FOK ;以近程方式跳转到FOK(只取FOK偏移地址)7.指定符THIS(合成算符)用于定义当前所指单元中的类型格式:THIS 类型/距离经THIS定义过的标号具有当前汇编段、偏移量和所规定的类型或距离等属性,例:FOOB EQU THIS BYTE;下面的字类型变量FOOW在这里指定为字节型FOOBFOOW DW 120 DUP(?)定义后,对同一数据块(FOOB和FOOW有相同的段和段内偏移量)有两种类型访问FOOB时为字节操作,访问FOOW时为字操作ADD AL,FOOB[3] ;将数组第四字节与AL相加MOV AX,FOOW[4]将数组第五六字节组成的字送AX也可以这样来构成FOOB:FOOB EQU BYTE PTR FOOW又例:DATAF EQU THIS FARDATAN:MOV AX,FOO这时 JMP DATAN为近程转移JMP DATAF为远程转移8.段修改符:用于对某一地址表达式指定临时段基址,如MOV AX,ES:[BX];指定ES为BX的段基址,对当前指令有效9.短程符SHORT与NEAR、FAR功能类似,位移量一字节范围 -128~+127,对应一条短转移指令例:JMP SHORT LAB;转移到标号LAB的地址10.方括号 [ ]表示操作数(加方括号)是一个地址偏移量,不是数值格式:[表达式] 或者 [表达式][ ]例:MOV [BX],AX ;将AX内容送BX所指单元MOV [BX+7],AX ;将AX内容送BX+7所指单元MOV AX,[BX][SI] ;将BX+SI所指单元内容送AX11.取高/低字节HIGH/LOW用来分离常量的高/低字节,对存储器操作数无效例:DATA EQU 789AHMOV AL,HIGH DATA ;AL=78HMOV AL,LOW DATA ;AL=9AH四.段定义伪指令1.SEGMENT—ENDS格式:[段名] SEGMENT [定位类型] [组合类型] [‘类别名’]┇[段名] ENDS·段名·定位类型(Align),给出实际段地点的种类或段长度的信息<1> PARA 段起始地址从一个节(paragraph)的边界开始<2> BYTE 段地址可从任意绝对地址开始<3> WORD 段地址从任意一个字的边界开始<4> PAGE 段地址从某一页的边界开始(一页等于256字节)<5> INPAG 段长度小于一页未说明定位类型时则默认为PARA·组合类型(Combine),又称联合类型,程序中各程序段的连接和定位方法<1> PUBLIC 将段名相同的程序段(亦称模块)依此紧密连接,但彼此不相互覆盖<2> COMMON将段名相同的程序段连接,各段都从同一地址开始<3> AT表达式段定位在由表达式(结果必须是常数)所指定的节的边界上例:AT 1234H,则段地址被定位在物理地址为12340H处,如果希望从12345H开始,则在SEGMENT命令的下一行写上ORG 5AT 不能向前引用<4>STACK 表示这个段是运行期间的堆栈段<5>MEMORY 该段是相互连接的几个段中地址最高的段<6>NONE本段与其他段无组合关系未说明联合类型时则默认为NONE,不和别的段连接·‘类别名’(Class),也叫组名,加单引号,汇编后类别名相同的程序段代码集中在一起定位,形成一个统一的物理段,类别名可自定,约定的有CODE (代码段)、DATA(数据段)、STACK(堆栈段)、CONST(常数)、MEMORY(存储)等2.ASSUME段寄存器说明伪指令,指明所定义的段名所使用的段寄存器(告诉汇编程序在运行期间通过哪一个段寄存器寻址才能找到所要的指令和数据),本语句一般在定义的代码段中第一条出现格式:ASSUME 段寄存器:段名 [,…]例: ASSUME CS:CODE,DS:DATA ;用SEGMENT—ENDS定义ASSUME CS:SEG KGF,DS:SEG BEGIN;由算符定义ASSUME ES:NOTHING ;用关键字定义,表示不使用ES(取消ES段寄存器)(保留字NOTHING在这里作为一个段名参数,ASSUME NOTHING表示取消所有段寄存器,各个段寄存器只能在指令性语句中由MOV指令赋值)·ASSUME只是设定段寄存器与逻辑段的对应关系,并没给段寄存器装入实际值,所以程序中必须对DS、ES、SS赋值,而CS由系统赋值3.ORG定点伪指令(段内定位),用以确定下一条指令(或变量)在当前段中的偏移地址格式:ORG 表达式表达式以65536(64K)为模计算,超过64K则取其余数本语句前未定义过的变量不可出现在表达式中,表达式可包含$(程序计数器当前值)如:ORG OFFSET $+1000表达式必须为正值,若为负值,就会从当前段的地址高端开始表达式最好不要写成OFFSET $-1000,以免把汇编过的1000个字节覆盖掉ORG指令不能带标识符,如START:ORG 0和SKIP ORG 100都是错的例:CODE SEGMENT ;段起始ORG 100H ;本程序代码从偏移地址100H开始装入ASSUME CS:CODE ;装入代码段地址到CS中START:IN AL,30H ;程序段SHL AL,1OUT 32H,ALJMP STARTCODE ENDS ;程序段结束END START ;汇编结束例:DATA SEGMENTORG 50HDAT DW 1,2,$+1┇DATA ENDS注意DAT不能定义为字节,否则与$不匹配五.过程定义伪指令格式:过程名 PROC 属性┇过程体RET过程名 ENDP·过程名不可缺省,它和标号一样有三个属性:段属性、偏移地址属性、距离属性·距离属性在PROC后指定,有NEAR和FAR,如果希望过程能让别的程序调用,则必须是FAR属性·一个过程允许多个入口,入口处有标号,标号要说明距离属性例:延时100ms子程序DELAY PROC ;隐含NEARMOV BL,10 4TDLY1: MOV CX,2801 ;内循环延时10ms 10TWAIT0: LOOP WAIT0 9/5T DEC BL 2TJNZ DLY1 8/4TRET 8TDELAY ENDP六.结束伪指令·NAME:给模块(源程序)命名格式:NAME 模块名称它出现在源程序的最前端·END:汇编结束格式:END [标号名]它通知汇编程序本模块汇编到此结束标号名是可选项,若选取,应指向执行本程序的起始地址若一个源程序是多模块,只有主模块的END后加标号,子模块只有END七.宏指令宏指令:在汇编语言源程序中多次重复出现的程序段,用一个名字来定义,然后当成一条指令来使用宏汇编:源程序中的宏指令经汇编程序翻译后扩展成对应程序段的机器码宏指令用MACRO—ENDM来定义,如:CRLF MACROMOV DL,0DHMOV AH,02HINT 21H┇ENDM(CRLF作回车换行)§4.3 汇编语言程序设计(assembly language programming)一.设计要求1.程序简明、易读、易调试、易修改2.程序占用内存要少(包括程序长度及运行时所需空间)3.程序运行速度要快二.基本设计方法1.选择合适的计算方法2.绘制程序流程图3.编制程序4.上机调试三.汇编语言程序格式和基本结构一般一个完整的汇编语言程序至少应包括以下三个程序段简化段格式:.MODEL SMALL.STACK 64H.DATA……;紧接指令代码从偶地址开始存放.CODESTART: MOV AX,@DATAMOV DS,AX……END STARTDATA SEGMENT ‘DATA’┇数据段DATA ENDSSTACK SEGMENT ‘STACK’┇堆栈段STACK ENDSCODE SEGMENT ‘CODE’ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AX┇代码段CODE ENDSEND START程序的基本结构分为顺序结构、分支结构、循环结构和子程序结构(一)顺序结构一种简单程序,按顺序执行例1.将200H单元的低4位和高4位分别送入201H和202H单元的低4位,这二单元的高4位清0200HX X201H 0202H 0DATA SEGMENTORG 200HBCD DB 47HDB 2 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACK MOV SS,AXMOV AX,TOPMOV SP,AXMOV BX,OFFSET BCD MOV AL,[BX]AND AL,0FHMOV [BX+1],AL MOV AL,[BX]MOV CL,4ROL AL,CLAND AL,0FHMOV [BX+2],AL HLTCODE ENDS END START例2.将ADDR1和ADDR2两单元开始的二个16位无符号数相加,考虑到进位,将其结果存放在SUM开始的三个单元中DATA SEGMNETADDR1 DW 7854HADDR2 DW 9981HSUM DB 3 DUP(0)DATA ENDSSATCK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,ADDR1ADD AX,ADDR2MOV WORD PTR SUM,AXADC SUM+2,0HLTCODE ENDSEND START例3.查表将DATA1单元中字节类型数据(0~0FH)转换成ASCII码,并存入ASCII单元中DATA SEGMENTASCTAB DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39H,41H,42H,43H,44H,45H,46HDATA1 DB 09HASCII DB ?DATA ENDSSTACK SEGMENT STACKDW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARASCTAB 30 031 1┇93941 A42 B┇46 F┇ASCIIPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET ASCTABMOV AL,DATA1XLATMOV ASCII,ALRETSTART ENDPCODE ENDSEND START例4.将200H和201H单元字节的高4位对调,低4位不变CODE SEGMENT200H201HORG 200HDATA1 DB 0F3H,47HASSUME CS:CODE,DS:CODESTART:MOV AX,CODEMOV DS,AXMOV CL,4MOV AX,WORD PTR DATA1 ;AX=47F3HROL AX,CL ;AX=7F34H ROL AH,CL ;AX=F734H ROL AL,CL ;AX=F743H MOV WORD PTR DATA1,AXHLTCODE ENDSEND START(二)分支结构通过判断产生分支,借助于条件转移指令跳转到相应的分支地址执行分支程序分支程序由三部分组成① 测试部分,负责产生决定分支的条件② 定向部分,根据测试条件是否满足,决定程序是否分支③ 标注部分,标明分支的去向利用跳转表也可使程序转移到分支地址例1.16位二进制补码X在DATA1单元,求其绝对值送DATA2单元(设X≠8000H)∣X∣= X,X≥0-X, X<0DATA SEGMENTDATA1 DW 9F87HDATA2 DW ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,DATA1AND AX,AXJNS ABS0NEG AXABS0: MOV DATA2,AXHLTCODE ENDSEND START例2.多重分支学生成绩按分数段划分为:A、90~100(5AH~64H)B、80~89 (50H~59H)C、70~79 (46H~4FH)D、60~69 (3CH~45H)E、 <60 ( <3CH)已知分数存放在MARK单元,请用ASCII码的A、B、C、D、E去代表MARK单元中的分数所属的段,并存于GRADE单元DATA SEGMENTMARK DB 81GRADE DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET MARKMOV AL,[BX]CMP AL,3CHJC LPECMP AL,46HJC LPDCMP AL,50HJC LPCCMP AL,5AHJC LPBMOV AL,41H ;‘A’JMP SHORT DONELPB: MOV AL,42H ;‘B’JMP SHORT DONELPC: MOV AL,43H ;‘C’JMP SHORT DONELPD: MOV AL,44H ;‘D’JMP SHORT DONELPE: MOV AL,45H ;‘E’DONE: MOV BX,OFFSET GRADE MOV [BX],ALHLTCODE ENDSEND START法2:直接查表转换(顺序结构)DATA SEGMENTTAB DB ‘EEEEEEDCBAA’MARK DB 81GRADE DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET TABMOV AL,MARKMOV AH,0MOV CL,10DIV CLXLATMOV GRADE,ALHLTCODE ENDSEND START(三)循环结构使机器重复执行一系列指令,是一种闭合的分支结构循环程序由四部分组成① 初始化部分(或预置部分),负责设置循环初值② 处理部分,循环过程的主体③ 控制部分,修改初值,判断是否循环循环次数由一计数器控制循环次数由某一指定条件是否满足来决定④ 结束部分,处理循环程序的最后结果例1.将DTAB单元开始的一组字节补码数(≤255个)求平均值,结果存入AVE单元,若结果为负,在SYM置FFH否则置0DATA SEGMENTDTAB DB 0FDH,0FCH,05H,0F8H,……DB 08H,25H,83H,97H,……COUNT EQU $-DTABAVE DB ?SYM DB ?DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK AVER PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA BX,DTABMOV CX,COUNTXOR DX,DXNEXT: MOV AL,[BX]CBWADD DX,AXINC BXLOOP NEXTMOV AX,DX MOV CL,COUNTIDIV CLMOV AVE,ALMOV SYM,0AND AL,ALJNS DONEMOV SYM,0FFHDONE: RETAVER ENDPCODE ENDSEND START循环控制方法:循环次数由计数器控制例2.将8位二进制小数规格化设需规格化的小数在DATA1单元,要求规格化后使其最高位为1,并存入DATA2单元,办法是把小数左移至最高为位为1为止,左移次数存入DATA3单元,若小数是0,则在DATA2和DATA3单元存入0示例:DATA1 DATA2 DATA322H 88H 02H01H 80H 07HCBH CBH 00H00H 00H 00HDATA SEGMENTDATA1 DB 22HDATA2 DB ?DATA3 DB ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CL,0MOV AL,DATA1 ;取数AND AL,AL ;设ZF、SF标志JZ DONECHKSF:JS DONEINC CLADD AL,AL ;左移一位JMP SHORT CHKSFDONE: MOV DATA2,ALMOV DATA3,CLHLTCODE ENDSEND START循环控制方法:循环次数由某一指定条件是否满足来决定例3.多重循环将n个无符号字节数从小到大排序,方法是依此比较相邻两单元的数,若前小后大不交换第一轮比较n-1次,最大数沉底(高地址)第二轮比较n-2次,次大数沉到最大数上面第n-1轮比较完若在某一轮比较时没有出现交换,说明顺序已排好,不必后续比较,故设交换标志AH=1代表不交换,AH=2代表有交换DATA SEGMENTLIST DB 18,6,11,3,1,2,3,9,8,7,6 DB 111,110,99,112,115,114,113,98,96,97 COUNT EQU $-LISTDATA ENDSSTACK SEGMENT STACKSTA DW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSET PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV DX,COUNT-1 ;n-1轮(外循环)EXGO:MOV CX,DX ;每轮次数(内循环)MOV AH,01H ;交换标志MOV BX,OFFSET LIST ;数据块首址INGO: MOV AL,[BX]INC BXCMP AL,[BX]JC NEXT ;数1小,不交换XCHG AL,[BX] ;数1>数2,交换DEC BXXCHG AL,[BX]INC BX ;恢复数据指针MOV AH,02H ;有交换标志NEXT: LOOP INGODEC DXJZ DONEDEC AHJNZ EXGODONE: RETSET ENDPCODE ENDSEND START(四)子程序结构基本要求:① 子程序的开始(入口处)应给予一个标号,结束处有返回指令② 通用子程序要说明入口条件(入口参数)和出口条件(出口参数)③ 调用子程序要注意保护现场和恢复现场调用—返回的堆栈操作:CALL target ;段内SPSP-2,[SP+1,SP] IP,IPIP+disp段间SPSP-2,[SP+1,SP] CS,CSsegSPSP-2,[SP+1,SP] IP,IPoffsetRET ;段内IP [SP+1,SP],SPSP+2;段间IP [SP+1,SP],SPSP+2CS [SP+1,SP],SPSP+2RET n ;如上操作后SPSP+n·子程序入口标号应说明距离属性·对于一个FAR过程,过程初必须先保护程序段前缀中的中断指令INT 20H 的断点地址(DS:0000),它是一个程序正常结束退出的中断处理程序例1.将内存200H单元开始的一个五字节十六进制数显示出来(低位在低地址)DATA SEGMENTORG 200HNUM DB 9AH,78H,56H,34H,12HDATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV BX,5MOV AX,STACKMOV SS,AXMOV SP,TOPMOV SI,OFFSET NUMNEXT: MOV DH,[SI+BX-1] ;(不用AL,因调用MOV DL,DH ; display返回时DL→AL)MOV CL,4ROL DL,CLAND DL,0FHCALL DISPLAYMOV DL,DHAND DL,0FHCALL DISPLAYDEC BXJNZ NEXTMOV AX,4C00HINT 21HDISPLAY PROC NEARADD DL,30HCMP DL,3AHJB OKADD DL,07H;(如果DL=3AH,3AH+7=41H是‘A’)OK: MOV AH,02HINT 21HRET。
汇编语言程序设计知识
![汇编语言程序设计知识](https://img.taocdn.com/s3/m/2fbc5edcf021dd36a32d7375a417866fb84ac0ad.png)
划分模块的原则
每个模块应具有独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。 模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。 模块长度适中。20条~100条的范围较合适。
操作数
注释部分不是汇编语言的功能部分,只是用来增加程序的可读性。 良好的注释是汇编语言程序编写中的重要组成部分。
注释
模块化的程序设计方法 优点和模块划分的原则 编程技巧
4.1.2 编程的方法和技巧
一、模块化的程序设计方法
1、程序功能模块化的优点
单个模块结构的程序功能单一,易于编写、调试和修改。 便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。 程序可读性好,便于功能扩充和版本升级。 对程序的修改可局部进行,其它部分可以保持不变。 对于使用频繁的子程序可以建立子程序库,便于多个模块调用。
二、分支程序
散转指令 转向n-1分支 转向n分支 K=n-1 ┅
转向0分支
K=0
转向1分支
K=1
图4-1 分支程序结构
┅
┅
K=n
01
02
03
04
128个子程序首址
JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP @A+DPTR JMPTAB:AJMP ROUT00 AJMP ROUT01 ┇ ┇ AJMP ROUT7F
二、机器汇编
机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目标程序。
将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。 汇编和反汇编的过程如图4-3所示。
汇编语言程序设计知识
![汇编语言程序设计知识](https://img.taocdn.com/s3/m/04a378849fc3d5bbfd0a79563c1ec5da50e2d6b8.png)
汇编语言程序设计知识汇编语言是一种低级语言,用于向计算机提供指令和数据。
掌握汇编语言程序设计知识,对于深入理解计算机体系结构和系统底层原理非常重要。
本文将为你介绍汇编语言程序设计的基本知识,并探讨其在实际应用中的应用。
一、汇编语言概述汇编语言是一种与机器语言直接对应的语言,每一条指令都可以直接被计算机硬件执行。
相比高级语言,汇编语言更加接近计算机底层,因此执行效率更高。
汇编语言通常包括指令集、寄存器和内存等概念。
1. 指令集汇编语言的指令集是由一系列指令组成的,这些指令可以直接被计算机执行。
指令集通常包括算术指令、逻辑指令、数据传输指令等,每个指令具有特定的功能和操作码。
2. 寄存器寄存器是计算机内部用于存储数据和执行操作的存储器。
在汇编语言中,寄存器用于进行数据传输、算术运算和逻辑操作等。
常见的寄存器包括通用寄存器、特殊寄存器和段寄存器等。
3. 内存内存是计算机用于存储指令和数据的地方。
在汇编语言中,程序员可以直接操作内存地址,进行数据的读取和存储。
通过合理地利用内存,可以提高程序的执行效率。
二、基本语法和数据表示在汇编语言中,程序员需要掌握基本的语法和数据表示方法,以编写正确的程序。
1. 语法汇编语言的语法是由指令、操作数和注释组成的。
指令是计算机执行的命令,操作数是指令所涉及的数据或寄存器。
注释用于解释程序的功能和作用。
2. 数据表示在汇编语言中,数据可以表示为二进制、十进制、十六进制等形式。
程序员需要根据实际需求选择适当的表示方式,并了解不同进制之间的转换方法。
三、程序设计实例为了更好地理解和应用汇编语言程序设计知识,我们将通过一个实例来演示程序设计的过程。
假设我们需要编写一个汇编程序,实现两个数相加的功能。
下面是程序的伪代码表示:```1. 将第一个数存储到寄存器A2. 将第二个数存储到寄存器B3. 将寄存器A和寄存器B的值相加,结果存储到寄存器C4. 将寄存器C的值存储到内存中```根据上述伪代码,我们可以编写如下的汇编程序:```MOV AX, num1 ; 将第一个数存储到寄存器AXMOV BX, num2 ; 将第二个数存储到寄存器BXADD AX, BX ; 将寄存器AX和寄存器BX的值相加MOV result, AX ; 将寄存器AX的值存储到result内存地址中```通过上述程序,我们实现了两个数相加的功能,并将结果保存在result变量中。
汇编语言程序设计知识
![汇编语言程序设计知识](https://img.taocdn.com/s3/m/adb6404d453610661ed9f4fd.png)
03.12.2
单片机原理及接口技术 精选PPT
标号
• 标号是用户定义的符号地址。 • 一条指令的标号是该条指令的符号名字,标号的值是
汇编这条指令时指令的地址。 • 标号由以英文字母开始的1~8个字母或数字组成,以
冒号“:”结尾。 • 标号可以由赋值伪指令赋值,如果没有赋值,汇编程
• 模块长度适中。20条~100条的范围较合适。
03.12.2
单片机原理及接口技术 精选PPT
二、编程技巧
1、尽量采用循环结构和子程序。 2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于存放子程
序入口参数的寄存器外,子程序中用到的其他寄存器的内容 应压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器 外,还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中, 一般不必把累加器内容压入堆栈。
• 流程图步骤分得越细致,编写程序是也越方便。 • 画流程图是程序结构设计是采用的一种重要手段。 • 一个系统软件有总的流程图(主程序框图)和局部的流程图。 • 流程图常采用的图形和符号。
03.12.2
单片机原理及接口技术 精选PPT
椭圆框 矩形框 菱形框
圆圈 指向线
03.12.2
或桶形框
:表示程序的开始或结束。
• 设计的硬件结构是否方便编程?
03.12.2
单片机原理及接口技术 精选PPT
二、确定算法
• 算法是如何将实际问题转化成程序模块 来处理。
• 在编程以前,先要对几种不同的算法进 行分析、比较,找出最适宜的算法
03.12.2
汇编语言程序设计知识点
![汇编语言程序设计知识点](https://img.taocdn.com/s3/m/cb05f22d5901020207409cd3.png)
汇编语言程序设计知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;1、假设机器字长为8位,[+3]补 =00000011B,[-3]补= FD H 。
2、十六进制数0F8H表示的十进制正数为 248 ,表示的十进制负数为 -8。
3、8位二进制数被看成是带符号补码整数时,其最小值是 -128,最大值是 127 。
4、计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。
目前,微机中普遍采用的是ASCII 码,称为美国信息交换标准码。
第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器1、IP寄存器中保存的是?下一条指令的首地址2、FLAGS标志寄存器中共有几位条件状态位?6位3、有几位控制状态位?3位4、标志寄存器分为哪2类?条件码,控制5、哪个标志位用来控制可屏蔽中断请求是否被CPU响应?IF6、键盘I/O、显示I/O和打印I/O分别对应16、10和17号中断。
(2)存储单元的地址和内容,存储器地址的分段,实模式下逻辑地址、物理地址的表示。
1、如果SS=6000H,说明堆栈段起始物理地址是60000H。
2、已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为1420H 。
3、如果数据段中一个内存单元对应的物理地址为3F756H,(DS)=3F00H,那么使用DS段寄存器指明该单元的段基值时,需要使用哪一个偏移量才能正确访问该单元756H。
4.如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式(1)与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址).数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。
汇编语言程序设计基础
![汇编语言程序设计基础](https://img.taocdn.com/s3/m/0c924d2dff4733687e21af45b307e87101f6f8a1.png)
汇编程序会自动知道AX与BX是寄存器。然而像下面这条指令: MOV REGSAVE,AX 则只有在数据段内定义过REGSAVE后,汇编程序才能识别这个名称。 注意:名称使用在数据段中时被称为变量名,若是用在指令段(即程序)中则称标号名,简称标号,用在过程中时又称为过程名。当作为标号使用时,必须以冒号(:)结束。如: START:MOV AX,DATA
MOV DS,AX … RET ;返回DOS BEGIN ENDP ;过程结束 CODESG ENDS ;代码段结束 END BEGIN ;源程序结束
在指令段中,一个操作数可以包含1个、2个或0个项目,项与项之间用逗号隔开。下面有三个例子: 操作码(助记符) 操作数 注释 没有操作数 RET ;返回 一个操作数 INC CX ;递增CX,即(CX+1)→ CX 两个操作数 ADD AX,12 ;把12加入AX中
过程也必须有名称,且是唯一的。除此之外,此过程名必须符合汇编语言名称的命名规则。操作数FAR告诉DOS的装载程序,PROC是此程序的执行进入点。
ENDP伪指令指示一个过程的结束,它与PROC具有相同的过程名。一个指令段可以同时含有数个过程。
ASSUME 段指定伪指令 微处理器使用SS寄存器作堆栈段的定址,以DS寄存器定址数据段,且以CS寄存器定址指令段。你必须告诉汇编程序,每一段所对应的段寄存器是哪个。ASSUME伪指令可以完成此工作,它在指令段中的编程格式如下所示: 助记符 操作数 ASSUME SS:堆栈段名, DS:数据段名,CS:指令段名
CODESG SEGMENT PARA ‘CODE’ ;定义代码段 BEGIN PROC FAR ;定义过程 1. ASSUME CS:CODESG,DS:DATASG,SS:STACKSG 2. PUSH DS ;DS 压入堆栈 3. SUB AX , AX ;AX清0000 PUSH AX ;堆栈压入0000 4. MOV AX , DATASG ;数据段起始地址送入DS
(完整word版)汇编语言知识点总结(word文档良心出品)
![(完整word版)汇编语言知识点总结(word文档良心出品)](https://img.taocdn.com/s3/m/6aaacf67f18583d048645916.png)
汇编语言精简版版权归属GuYue.Wang一、入门基础1.汇编基本格式2.内存管理:小端存储。
3.寄存器16位CPU通用寄存器共8个:AX,BX,CX,DX,BP,SP,SI,DI,它们都可以作为普通的数据寄存器来使用,也有一些特殊的功能,如下:①数据寄存器AX:BX:存放偏移地址CX: 循环次数(loop)DX:②指针寄存器SI:存放偏移地址,指向源操作数或作为变址寄存器,参与基址、变址寻址DI:存放偏移地址,指向目的操作数或作为变址寄存器,参与基址、变址寻址SP:堆栈指针,存放偏移地址,与SS结合使用BP:基址寄存器,存放偏移地址,与DS结合使用IP: 指令指针③段寄存器CS:代码段DS:数据段SS:堆栈段ES:4.标志位①ZF(零标志位):结果为0,则ZF=1.②PF(奇偶标志位):结果所有bit位1的个数为偶数,PF=1③SF(符号标志位):有符号数运算,结果为负,SF=1④OF(溢出标志位):有符号数运算,发生溢出,OF=1⑤CF(进位标志位):无符号数运算,记录了最高有效位向更高位的进位或借位5.定义数据二、指令集1.数据传送指令1> MOV <目的操作数> , <源操作数>①两个操作数位数一致②不能在两个存储单元之中进行数据直接传送③不能在两个段寄存器之间进行数据直接传送④imm不能直接送入段寄存器⑤目的操作数不能是CS,IP2> XCHG <目的操作数> , <源操作数> :交换两个操作数的内容xchg reg , regxchg reg , memxchg mem , reg3>LEA <OP2> , <OP1> :将OP1的地址偏移量传送给OP2①源操作数必须是内存操作数②目的操作数必须是16位的通用寄存器4>PUSH <OP> , POP <OP>:堆栈①SS:栈段寄存器SP:栈顶指针(使用时应当先初始化)②一次压入或弹出一个字,栈顶最大变化范围0~FFFFH③执行PUSH、POP时,SP指针默认移动④栈空:SP指向栈空间最高地址单元的下一个单元⑤OP:段寄存器(除CS),16位通用寄存器,内存的16位字2.算数运算指令1> ADD <OP1> , <OP2> | SUB <目的> , <源>①目的=目的+/-源②两操作数不能同时为mem(注:ADD 、SUB影响标志位:CF、ZF、SF、OF、AF、PF)2> INC <reg/mem>:自增1 | DEC <reg/mem>:自减1(注:INC、DEC适用于无符号运算,不影响进位标志CF)3> NEG <reg/mem> :求负(求补),按位取反加1①影响标志位:CF、ZF、SF、OF、AF、PF4> CMP <> , <>:目的操作数—源操作数,不回送结果,只影响标志位①根据相减结果修改OF、SF、ZF、CF、AF、PF②无符号数的比较:③有符号数的比较:5> MUL <乘数>(无符号乘法)| IMUL <乘数>(有符号乘法)①乘数不能位imm②IMUL指令的执行结果的高半部分不是低半部分的符号扩展,则设置CF、OF6> DIV <除数>(无符号除法)| IDIV <除数>(有符号除法)①除数不能位imm②IDIV:余数符号与被除数相同3.逻辑运算与移位指令1>AND <目的> , <源>:按位相与,将结果保存在目的操作数中①总是清除OF 和CF,根据结果修改SF、ZF、PF②对特定位清‘0’同时保留其他位③应用:字符大小写转化2> OR <目的> , <源>:按位相或,将结果保存在目的操作数中①使CF=0、OF=0,根据结果修改SF、ZF、PF②对特定位置‘1’③将数字转化位对应的ASCII码3> NOT <reg/mem>:按位取反,不影响任何标志位4> XOR <目的> , <源>:按位异或,将结果保存在目的操作数中①对某些为取反,且不影响其它位,与‘0’异或保持不变;与‘1’异或取反②对寄存器清0,或判断两个值是否相等③交换两个数,不使用中间变量④CF=0,OF=0,PF、SF、ZF变5> TEST <OP> , <imm>:按位相与,不回送结果①清除OF、CF;修改SF、ZF、PF②测试某些位是‘0’或‘1’6> SHL、SHR①格式:SHL mem/reg , 1SHL mem/reg , CL(移动次数>1放入CL)②③相当于乘除法4.程序控制指令1> JMP :无条件转移指令2>LOOP:循环指令,循环次数存于cx中,执行loop时首先CX=CX-1,然后判断CX=0?,是则跳转3>条件跳转指令①基于特定的标志值②根据操作数之间是否相等,或根据(E)CX的值与CMP <left> , <right>指令结合使用③基于无符号整数比较结果的跳转指令④基于有符号整数比较结果的跳转指令5.输入输出指令(接口与CPU之间的操作)1> IN AL|AX , <接口地址> :从接口到CPU的输入操作2> OUT <接口地址> , AL|AX :从CPU到接口的输出操作①CPU只能用AL或AX接收或发送数据②直接寻址(接口地址用一个字节表示00~FFH)IN AL, 35HOUT 44H , AX③寄存器间接寻址(接口地址由DX内容决定0000~FFFFH)MOV DX,03F8HIN AL ,DX三、补充1.CLC :使CF=02.ADC <op1> , <op2> :op1=op1+op2+CF。
汇编语言(1)—汇编语言程序设计基础知识PPT课件
![汇编语言(1)—汇编语言程序设计基础知识PPT课件](https://img.taocdn.com/s3/m/eb9e793a856a561253d36f88.png)
• ASSUME伪操作可用来明确段和段寄存器的关系
• 格式:
• ASSUME 〈段寄存器名〉:〈段名〉, 〈段寄存器名〉: 〈段名〉, …
• 其中段寄存器名必须是CS、DS、ES和SS中的一个,而 段名则必须是由SEGMENT定义的段中的段名。
• 指令
•
mov bl,xd
•
mov xe,bl
• 被汇编为
变量定义符
• 主要包括下列几种: • DB(Define Byte):定义字节,后面的每个操作数占1个
字节。 • DW(Define Word):定义字,后面的每个操作数占1个字。 • DD(Define DWord):定义双字,后面的每个操作数占2个
字。 • DQ(Define QWord):定义四字,后面的每个操作数占4个
• ③ 类型属性变量的类型属性定义该变量所保留的字节数。 • 例: A DB ‘ABCDEFG’
• 操作项可以是指令、伪操作或宏指令的助记符。
• 操作数项由一个或多个表达式组成,多个操作数项之 间一般用逗号分开。
• 注释项用来说明一段程序或一条或几条指令的功能, 它是可有可无的。
分段结构
• 汇编语言源程序的程序基本结构是段,一个汇编语言 源程序由若干个代码段、数据段、附加段和堆栈段组 成。段之间的顺序可以随意安排,通常数据段在前, 代码段在后。任何可执行汇编语言程序至少要有一个 代码段,通常还可能有数据段和堆栈段。每个段都有 段首指令和段结束指令,段的内容介于这两条指令之 间。
字。 • DT(Define Tbyte):定义十字节,后面的每个操作数占1
0个字节。
操作数
• 数值表达式;
• ASCⅡ码字符串;
• 地址表达式;
3.0-汇编基础知识
![3.0-汇编基础知识](https://img.taocdn.com/s3/m/e0af7f4e852458fb770b5679.png)
3.2-寄存器
有几种大小的寄存器:8位,16位,32位(在MMX处理器中有更多)。在16位程序中,你仅能使用16位和8位的寄存器。在32位的程序中,你可以使用32位的寄存器。
mov cl, ah
;把ax的高字节移入cl
sub cl, 10 பைடு நூலகம்
;从cl的值中减去10(十进制)
mov al, cl
;并把cl存入eax的最低字节
让我们来分析上面的代码:
mov指令可以把一个值从寄存器,内存和直接数值移入另一个寄存器。在上面的例子中,eax包含了12345678h,然后ah的值(eax左数第三个字节)被复制入了cl中(ecx寄存器的最低字节)。然后,cl减10并移回al中(eax的最低字节)
寄存器的不同类型:
全功能(General Purpose)
这些32位(它们的组成部分为16/8位)寄存器可以用来做任何事情:
eax (ax/ah/al)加法器
ebx (bx/bh/bl)基(base)
ecx (cx/ch/cl)计数器
edx (dx/dh/dl)数据
虽然它们有名字,但是你可以用它们做任何事。
3.0-汇编基础知识
Win32Asm 教程
前一章目录后一章
3.0-汇编基础知识
这章将教你汇编语言的基础知识
3.1-伪代码(opcodes)
汇编程序是用伪代码创建的。一个伪代码是一条处理器可以理解的指令。例如:
汇编程序设计语言知识点
![汇编程序设计语言知识点](https://img.taocdn.com/s3/m/64693f846037ee06eff9aef8941ea76e58fa4af9.png)
汇编程序设计语言知识点汇编程序设计语言是一种低级别的程序设计语言,用于编写计算机的底层代码。
它与高级语言相比,更加接近机器的指令集架构,可以直接操作计算机的硬件和寄存器。
在本文中,将介绍汇编程序设计语言的一些重要知识点。
一、汇编语言基础知识1. 汇编语言的发展历程:从机器语言到汇编语言;2. 汇编语言的组成部分:指令、操作数和寄存器;3. 汇编语言的语法规则:标号、指令、操作数和注释的格式;4. 汇编程序的编写流程:编辑、汇编、链接和运行。
二、汇编语言的数据类型1. 二进制数和十六进制数的表示方法;2. 常用的数据类型:字节、字和双字;3. 数据的存储方式:大端字节序和小端字节序;4. 数据的表示范围和溢出问题。
三、汇编语言的指令集1. 数据传输指令:MOV、XCHG、PUSH和POP等;2. 算术运算指令:ADD、SUB、INC和DEC等;3. 逻辑运算指令:AND、OR、XOR和NOT等;4. 条件转移指令:JMP、JZ、JE和JG等;5. 循环控制指令:LOOP、LOOPZ和LOOPNZ等;6. 系统调用指令:INT、CALL和RET等。
四、汇编语言的控制结构1. 顺序结构:代码按顺序执行;2. 条件结构:根据条件选择执行路径;3. 循环结构:根据条件循环执行代码块;4. 无限循环:使用JMP指令实现无限循环。
五、汇编语言的调试和优化1. 调试工具:调试器、寄存器监视、内存监视和断点设置;2. 常见的调试问题和解决方法;3. 优化技巧:减少指令数量、减少内存访问和提前计算等。
六、汇编语言的应用领域1. 操作系统开发:汇编语言作为操作系统内核的编程语言;2. 嵌入式系统开发:汇编语言用于编写驱动程序和底层代码;3. 游戏开发和图形编程:汇编语言用于优化性能和实现特殊效果;4. 加密和反汇编:汇编语言用于加密算法和反编译程序。
结语本文介绍了汇编程序设计语言的基础知识、数据类型、指令集、控制结构、调试和优化等重要知识点,以及其在不同领域的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章1、什么是汇编语言?2、汇编语言程序设计过程:编辑源程序,编译(汇编),连接,运行调试3、汇编语言特点?与机器语言一一对应,直接操作硬件,高效率(空间和时间,运行速度快,目标代码短,占用存储空间少)4、数制转换第2章8086计算机组织结构1、计算机硬件系统组成:CPU、存储器、输入输出设备。
2、CPU组成:运算器、控制器、寄存器,运算器和控制器由芯片设计时设计好,不可做任何改动,程序设计员仅能在程序里使用寄存器,寄存器都有相应的名字,如AX,能在程序里直接使用寄存器是汇编语言区别于高级语言的最重要特点,这样就可以直接控制硬件系统。
3、总线结构:数据总线、地址总线、控制总线。
数据总线分8位、16位、32位和64位等,多少位机就是以数据总线来划分,比如8位机、32位机。
8086机是16位机,但地址总线是20位,地址总线数量决定了内存寻址空间的大小,如8086有20位地址线,那么寻址空间是:220=210*1K=1M,8086最大寻址空间为1MB,即地址范围:00000H~FFFFFH。
控制总线主要传送控制信息,如读写操作,读写操作的主体是CPU,读操作是指CPU从内存或外设读取数据,写操作是指CPU把数据写到内存或外设中。
4、存储器:存储器的最小单元是字节(Byte,由8个位组成),字节的多少就是存储器的容量。
每一个字节单元都有一个唯一的编号,这个编号就是字节单元的地址,此地址就是物理地址,对于8086而言,编号的形式为:XXXXXH,如85421H。
如果要读写存储器,必须知道某一个字节单元的地址。
多个字节单元可以组合成更大的单元(数),比如2个字节单元组合成一个字(Word),4个字节单元组合成一个双字(Double Word)等,规定:这个组合后的大单元是以最小字节单元地址为自己的地址。
如85421H字节单元内容为12H,85422H 字节单元内容为34H,那么以85421H地址的字单元的内容就是3412H。
地址取最小字节单元的地址为大单元的地址。
内容排序按照“高高低低”原则:高字节放在高地址里,低字节放在低地址里。
详细请参看2.3节(P30页)5、8086CPU寄存器(1)通用类:AX(AH,AL)、BX(BH,BL)、CX(CH,CL)、DX(DH,DL)(2)段寄存器类:CS、DS、ES、SS(3)与偏移地址相关类:SI、DI、SP、BP(4)特殊类:IP、FLAGS所有寄存器都是16位大小,通用类的16位又可看成2个8位的寄存器组成,区分为高8位(High)和低8位(Low),因此取名为AH和AL,其他类似。
CS:存放代码段段地址,DS:存放数据段段地址,SS:存放堆栈段段地址,ES:存放数据附加段段地址,一般作为DS的辅助使用,比如在一段程序里需要用到2个不同数据段的数据时,其中一个数据段段地址存放在DS中,另一个存放在ES中。
SI、DI:一般用于变址寻址方式,如[BX+SI]、[BX+DI],SP:堆栈段中堆栈栈顶的偏移地址,不可修改,由SS:SP逻辑地址始终指向堆栈的栈顶。
详细参看2.3.2,P32页BP:一般也用于堆栈,可以作为SP的备份,通常也是用SS:BP逻辑地址表示,BP可以随意修改,因此通过SS:BP可以访问堆栈的任何地方。
此外,BP还与BX一样,可以作为基地址方式进行寻址,比如[BP+SI]、[BP+DI],但此时访问的数据是指堆栈段里的,如果要访问数据段的必须明显写出DS,如DS: [BP+SI]、DS:[BP+DI]IP:指令指针,有CS:IP逻辑地址始终指向下一条即将执行指令的地址,如果要使程序进行跳转,必须改变CS和IP的值,但CS和IP寄存器不能直接修改(比如用MOV),只能通过跳转指令来修改,如JZ、JMP、LOOP等。
FLAGS:标志位寄存器,记录CPU运算器的状态,可以进行位操作,CF:进位标志,ZF:运算结果0标志,SF:运算结果符号标志,OF:溢出标志,其他的暂时不需要记。
6、分段机制8086的数据线为16位,地址线为20位,寄存器也是16位的,由于读写存储器(内存)单元时,需要知道存储器单元的地址,如XXXXXH,这个地址如何在16位的数据线上传输,传输到寄存器(XXXXH)里,如何在寄存器里保存,用一个寄存器是保存不了的,必须用2个寄存器,第一个寄存器存放的地址XXXXH,我们称为段地址,放在CS、DS、ES和SS中。
物理地址=段地址*10H+偏移地址(H,全部用十六进制表示)物理地址:xxxxxH,逻辑地址:xxxxH:xxxxH,逻辑地址表示方法,冒号前面的叫做段地址,后面的叫偏移地址。
简单换算方法:逻辑地址转物理地址方式是将段地址后面加个0,与偏移地址相加即可第三章指令系统与寻址方式1、指令格式:如Tab:Mov ax, bx ; 注释Tab是标号,标号后必须紧跟一个冒号,标号代表当前指令在内存中的位置,编译成二进制代码后,标号就不存在了;Mov是操作码,表示当前指令的作用、功能;ax是目的操作数,bx是源操作数,两者表示参与指令操作的数,目的操作数存放最后指令操作的结果;分号后边的是注释,说明当前指令的过程,方便程序的阅读。
因此可以写成:“标号:操作码目的操作数,源操作数; 注释”“标号,注释”不一定每条指令都有,操作数也可能有一个,也可能没有,也可能有两个。
2、提供操作数的方式:(1)立即数;(2)通过寄存器(一般指通用寄存器);(3)通过内存(必须要提供或者能计算出内存的地址)目的操作数不能是立即数,源操作数和目的操作数不能同时为内存操作数。
3、寻址方式:将操作数来自于不同的地方进行分类:立即数寻址、寄存器寻址、内存寻址(1)立即数寻址:操作来自立即数,即立即数寻址,如mov ax, 1234H,1234H为立即数。
(2)寄存器寻址:操作数来自于寄存器,如上述指令中的ax,即为寄存器寻址。
(3)内存寻址:操作数来自于内存,需要给出或者计算出内存的地址,根据获得这个地址的方式不同,又分为以下几种方式:1)直接寻址:直接给出内存地址(一般是偏移地址),如mov ax, [1000H],1000H就是内存地址。
2)寄存器间接寻址:内存地址事先放在寄存器里,要通过取出寄存器里的值才能得到地址,如mov ax, [bx],内存的地址在bx里,假设bx里的值是1200H,那么指令首先通过bx得到1200H,再去内存找到1200H地址。
存放间接地址的寄存器只能是:bx,bp,si,di3)寄存器相对寻址:在寄存器间接寻址的基础上有个常数偏移量,如mov ax, [bx+1000H],假设bx里的值是1200H,那么指令首先通过bx得到1200H,再去内存找到1200H,然后基于这个1200H地址,向后再偏移1000H,才能得到真正要的数,所以实际上的地址是1200H + 1000H。
常量对应的是“相对”。
有多种写法:[bx+1000H]、1000H[bx]、[bx]+1000H,都可以,使用的寄存器也只能是:bx,bp,si,di4)基址变址寻址方式:在寄存器相对寻址里的“相对常量”放在另一个寄存器里,如mov ax, [bx+1000H],如果事先将1000H放在SI寄存器里,那么指令就变成:mov ax, [bx+si],这就是基址变址寻址方式,前面的bx表示基地址,si表示变化的地址,把两个寄存器的值相加才是要的内存地址,也可以写成mov ax, [bx][si],经常采取这种方式来遍历内存数据,因为只要改变si的值即可。
基地址只能用bx、bp,变地址只能用si、di。
5)相对基址变址寻址方式:在基址变址寻址方式的基础上,再加一个常量即可,如mov ax, [bx+si+2000H],把两个寄存器的值和常量相加才是要的内存地址,也可以写成mov ax, 2000H[bx+si]或者mov ax, 2000H[bx][si],基地址只能用bx、bp,变地址只能用si、di。
4、无条件转移指令:jmp 标号标号表示目的地址,标号表示对应指令在内存中的地址,一般由CS和IP组合表示,如CS:IP,CS是代码段寄存器,IP是指令指针寄存器。
如果转移不涉及到CS的变化,表示段内转移,如果CS必须改变,就是段与段之间的转移。
如果代表指令地址的标号的值事先放在寄存器或者某一个内存(一般通过寄存器间接表示)里,也可以用寄存器或内存地址代表标号,如jmp bx,执行jmp指令后,IP寄存器的值就等于bx的值了,如jmp [bx],先通过bx找到内存,再从内存中取出值来才是要转移的地址。
如果要从内存中取出4个字节来改变CS和IP,那么需要在前面加DWORD PTR,如jmp DWORD PTR [bx]。
5、指令系统(1)数据传送类:mov push/pop xchg LEA(offset)(2)算术运算类:ADD,ADC,INC,SUB,SBB,DEC,NEG,CMP,MUL,IMUL,DIV,IDIV,CBW,CWD(3)逻辑运算类:AND,OR,NOT,XOR,TEST(4)移位指令类:SAL,SAR,SHL,SHR,ROL,ROR,RCL,RCR(5)条件转移类:JZ,JNZ,JC,JNC,JS,JNS,JA,JBJG,JL第四章程序结构1、完整段定义程序框架2、伪指令常量定义:常量名EQU 表达式,如X EQU 100,常量不占数据段内存地址变量定义:变量名类型初始值,如Y db 1,2,3,类似高级语言中的数组定义,初始值可以是数字、表达式、字符、字符串等。
类型有:DB,DW,DD初始值可以是?$,?SEG,OFFSET,TYPE,LENGTH,SIZE,PTR(BYTE,WORD,DWORD)第五章顺序、分支与循环程序设计1、分支:二分支结构,多分支结构用条件转移指令实现程序的分支,用跳转表法实现多分支结构构造条件指令:CMP转移指令:JC,JNC,JZ/JE,JNZ/JNE,无符号数比较大小(Above,Below,Equal):JA,JB有符号数比较大小(Great,Less,Equal):JG,JL2、循环:Do-While结构,While-Do结构包括:循环初始化,循环体,循环控制三部分循环控制指令:LOOP,用于明确知道循环次数的应用,类似于高级语言的FOR语句循环次数事先放在CX里,每次执行LOOP时,首先让CX=CX-1,然后再检测CX是否等于0,如果等于0就停止循环,不等于0就继续循环。
以下问题是否都搞清楚了?1、汇编语言特点、优势,汇编语言指令的组成?2、编码及其含义,比如一个数01000010B可以有多种解释,比如96H也有种描述;压缩BCD 码、非压缩BCD码、及其转换。