微机原理-04汇编语言程序设计知识
汇编语言程序设计
汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
微机原理与接口技术-第4-1章
例4-3 用键盘最多输入10个字符,并存 入内存变量Buff中,若按“Enter”键,则 表示输入结束。
用BIOS层功能调用实现 层功能调用实现 的源程序: 的源程序: .MODEL SMALL CR EQU 0DH .STACK 200H .DATA Buff DB 10 DUP(?) .CODE .STARTUP MOV CX, 0AH LEA BX, Buff
Windows层功能模块的调用
Win32 API使用堆栈来传递参数 API函数调用 C语言的消息框函数的声明: int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in message box LPCTSTR lpCaption, // message box title UINT uType // message box style );//参数 最后还有一句说明: Library: Use User32.lib.//说明这个函数的位置
API 函数的返回值
有的API 函数有返回值,如MessageBox 定义 函数有返回值, 有的 的返回值是int类型的数,返回值的类型对汇编 的返回值是 类型的数, 类型的数 程序来说也只有dword 一种类型,它永远放在 一种类型, 程序来说也只有 eax 中。如果要返回的内容不是一个 如果要返回的内容不是一个eax所能 所能 容纳的, 容纳的,Win32 API 采用的方法一般是返回一 个指针, 个指针,或者在调用参数中提供一个缓冲区地 干脆把数据直接返回到缓冲区中去。 址,干脆把数据直接返回到缓冲区中去。
.REPEAT MOV AH, 0H INT 16H .BREAK .IF AL==CR MOV [BX],AL INC BX .UNTILCXZ .EXIT 0 END
微机原理课后习题参考答案
微机原理课后习题参考答案第1部分微型计算机基础知识1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同?【解】微处理器:指计算机内部对数据进行处理并对处理过程进行控制的部件,伴随着大规模集成电路技术的迅速发展,芯片集成密度越来越高,CPU可以集成在一个半导体芯片上,这种具有中央处理器功能的大规模集成电路器件,被统称为“微处理器”。
微型计算机:简称“微型机”、“微机”,也称“微电脑”。
由大规模集成电路组成的、体积较小的电子计算机。
由微处理机(核心)、存储片、输入和输出片、系统总线等组成。
特点是体积小、灵活性大、价格便宜、使用方便。
微型计算机系统:简称“微机系统”。
由微型计算机、显示器、输入输出设备、电源及控制面板等组成的计算机系统。
配有操作系统、高级语言和多种工具性软件等。
1.2 CPU在内部结构上由哪几部分组成?CPU应该具备哪些主要功能?【解】CPU在内部结构上由运算器、控制器、寄存器阵列和内部总线等各部分构成,其主要功能是完成各种算数及逻辑运算,并实现对整个微型计算机控制,为此,其内部又必须具备传递和暂存数据的功能。
1.3 微型计算机采用总线结构有什么优点?【解】①简化了系统结构,便于系统设计制造;②大大减少了连线数目,便于布线,减小体积,提高系统的可靠性;③便于接口设计,所有与总线连接的设备均采用类似的接口;④便于系统的扩充、更新与灵活配置,易于实现系统的模块化;⑤便于设备的软件设计,所有接口的软件就是对不同的口地址进行操作;⑥便于故障诊断和维修,同时也降低了成本。
总线的逻辑电路有些是三态的,即输出电平有三种状态:逻辑“0”,逻辑“1”和“高阻”态。
1.4计算机总线有哪些,分别是什么?【解】总线按其信号线上传输的信息性质可分为三组:①数据总线,一般情况下是双向总线;②地址总线,单向总线,是微处理器或其他主设备发出的地址信号线;③ 控制总线,微处理器与存储器或接口等之间1.5 数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用一套总线或者合用部分总线,那么要靠什么来区分地址和数据?【解】数据总线(DB)为双向结构,数据在CPU与存储器或I/O 接口之间的传送是双向的,(数据既可以读也可以写),其宽度通常与微处理器的字长相同。
微机原理——汇编语言程序设计基本方法
第四章汇编语言程序设计基本方法4.1汇编语言基本概念汇编语言与机器语言4.1.1编语言与机器语言汇编语言是用意义明确的助记符来表示指令的操作码、操作数。
汇编语言是面向机器的语言,不同的机器有不同的汇编语言。
用汇编语言编写的程序具有执行速度快、占用存储空间小、实时性能好等待点。
汇编语言放大量用于编写计算机系统程序、实时控制程序等。
用汇编语言编写的程序称为汇编语言源程序(简称汇编语言程序)。
计算机必须将汇编语言程序翻译成由机器代码组成的目标程序才能执行。
这个翻译过程称为汇编。
自动完成汇编过程的软件叫汇编程序。
汇编语言的语句有两种基本类型:指令与伪指令。
4.1.2编语言中语句的组成CYCLE: ADD AX ,02;(AX) (AX)+02DATA1 DB 20H,30H,40H,50H1.名称1)组成名字的字符(1)字母A—Z(2)数字0一9;(3)专用字符?、. 、@、_、$2)组成名称的规则(1)除数字0一9外所有字符都可以放在名字的第一个位置。
(2)使用字符“.“时必须放在名字的第一个位置。
(3)名字最多可以使用31个字符、汇编程序不能识别多余的字符。
3)以冒号分割时,名称是一个标号;以空格分割时,名城既可以使标号,也可以是变量。
2.操作助记符(助记符)操作助记符将指出该语句的基本操作功能。
必须存在。
操作符可以是指令、伪指令或宏指令的助记符。
3.操作数操作数可以表示数字本身,也可以是指出如何获得操作数的信息。
操作数不是必需的,操作数多于两个时,中间用逗号分割,操作数与操作助记符之间必须用空格分割。
4.注释近用作语句或程序的说明,不产生目标代码。
4.1.1汇编语言中的常数与表达式1.常数B:表示二进制数10110011BD:表示十进制数179D或179O:表示八进制数263OH:表示十六进制数B3H用单引号“‘”括起来的一串字符称为字符串常量2.表达式表达式由操作数和操作符组成操作数可以是常数或标识符、表达式操作符:算术操作符、关系操作符、属性操作符及其它操作符等(1)算术操作符:+、-、*、/、MOD,双操作数操作符,操作数必须为数字操作数,MOD的两个操作数必须都为正整数。
微机原理与应用ch04-汇编语言
汇编语言程序到机器语言程序的转换过程称为汇编。 1.手工汇编:人工查指令表汇编。用于设计短小程 序或调试程序的场合。 2.机器汇编:用汇编程序进行汇编。
2007-11-27 张臣 15
《微机原理与应用》课件
2. 汇编语言的汇编
2007-11-27
张臣
16
《微机原理与应用》课件
(1)人工编译
人工查指令 机器码表 汇编语言 源程序
2007-11-27
张臣
20
《微机原理与应用》课件
源程序的汇编结果实例
2007-11-27
张臣
21
《微机原理与应用》课件
练习
设(59H)=50H; MOV A, 59H MOV R0, A MOV A, #0 MOV @R0, A MOV A, #25H MOV 51H, A MOV 52H, #70H A= ; (50H)= (51H)= (52H)=
2007-11-27 张臣 32
《微机原理与应用》课件
(2) 子程序结构
MAIN : LCALL SUB …… SUB: PUSH PSW ;现场保护 PUSH Acc 子程序处理程序段 POP Acc ;现场恢复 POP PSW RET
2007-11-27
; 主程序
1、子程序应取名,即子程 序的入口应加标号,以 便主程序调用时使用 2、注意使用堆栈保护现场 (PUSH)和恢复现场 (POP) 3、子程序的设计中要考虑 参数的传递,即要满足 入口条件和出口状态。 4、子程序的结尾必须是子 程序的返回指令RET。
2007-11-27 张臣 7
《微机原理与应用》课件
2. 汇编语言的指令格式
[标号: ] 操作码 [操作数] [; 注释]
汇编语言重点知识总结
汇编语言重点知识总结汇编语言是一种低级程序设计语言,它直接操作计算机硬件资源,具有较高的执行效率和灵活性。
本文将重点总结汇编语言的相关知识,涵盖指令集、寻址模式、数据传送和运算、控制流等方面。
一、指令集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指令无条件跳转到指定的地址。
微机原理课后习题答案
第1章计算机基础知识三、简答题1.微型计算机的基本组成?答:以微型计算机为主体,配上相应的系统软件、应用软件和外部设备之后,组成微型计算机系统。
(微型计算机+软件系统,也可)2.简述冯.诺依曼型计算机基本思想?答:冯.诺依曼型计算机是由运算器,控制器,存储器,输入设备和输出设备组成的。
其中,运算器是对信息进行加工和运算的部件;控制器是整个计算机的控制中心,所以数值计算和信息的输入,输出都有是在控制器的统一指挥下进行的;存储器是用来存放数据和程序的部件,它由许多存储单元组成,每一个存储单元可以存放一个字节;输入设备是把人们编写好的程序和数据送入到计算机内部;输出设备是把运算结果告知用户。
(写出主要内容,即可)3.什么是微型计算机?答:微型计算机由CPU、存储器、输入/输出接口电路和系统总线构成。
(只要答出五大组成部分即可)4.什么是溢出?答:溢出就是在运算中,使用已经确定的二进制位数,没有办法表示运算结果。
二、简答题1.在内部结构中,微处理器主要有哪些功能部件组成?答:1) 算术逻辑部件 2) 累加器和通用寄存器组3) 程序计数器 4) 时序和控制部件(意思相近即可)2. 微处理器一般应具有哪些功能?答:1)可以进行算术和逻辑运算 2)可保存少量数据3)能对指令进行译码并完成规定的操作 4)能和存储器、外部设备交换数据5)提供整个系统所需的定时和控制 6)可以响应其他部件发来的中断请求3. 什么是总线周期?答:CPU使用总线完成一次存储器或I/O接口的存取所用的时间,称为总线周期,一个基本的总线周期包含4个T状态,分别称为T1、T2、T3、T4。
(意思相近即可)?2.中断服务程序结束时,。
RET应该可以使中断服务程序返回主程序,但因为RETF是子程序返回指令,它只从堆栈中恢复CS和IP,而不能使状态字PSW得以恢复,所以不能使断点完全恢复,对源程序的继续执行造成不良影响。
(回答可以返回2分,出现的问题3分,意思相近即可)3.写出把首地址为 BLOCK1) MOV BX,OFFSET BLOCK+6 2) LEA BX,BLOCK 3) LEA BX,BLOCKMOV DX,[BX] MOV DX,[BX+12] MOV SI,12MOV DX,[BX+SI]4. 设BX=134AH,BP=1580H,DI=0528H,SI=0234H,DS=3200H,SS=5100H,求在各种寻址方式下源操作数的物理地址。
汇编语言程序设计
第四章汇编语言程序设计(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。
汇编语言程序设计知识
汇编语言程序设计知识汇编语言是一种低级语言,用于向计算机提供指令和数据。
掌握汇编语言程序设计知识,对于深入理解计算机体系结构和系统底层原理非常重要。
本文将为你介绍汇编语言程序设计的基本知识,并探讨其在实际应用中的应用。
一、汇编语言概述汇编语言是一种与机器语言直接对应的语言,每一条指令都可以直接被计算机硬件执行。
相比高级语言,汇编语言更加接近计算机底层,因此执行效率更高。
汇编语言通常包括指令集、寄存器和内存等概念。
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变量中。
微机原理与接口技术-汇编语言程序设计
第四章 汇编语言 程序设计
2.字符和字符串
字符或字符串常量是由包含在单引号内的1或多个ASCII 字符构成的。汇编程序把它们表示成一个字节序列,一个 字节对应一个字符,把引号中的字符翻译成它的ASCII值 。 例如“A”等价于41H,“AB”等价于4142H。
第四章 汇编语言 程序设计
3. 符号常量 符号常量使用标识符表达一个数值。常量使用有意
数字组成 由 “0”或“1”组成的序列,以字母B或b结尾 由若干个0~7的数字组成的序列,以字母O或o结尾 由若干个0~9的数字组成的序列,以字母D或d结尾,或没有任何字母作结尾 由若干个0~9的数字或A~F的字母所组成的序列,以字母H或h结尾
表4-1 各种进制的常数
举例 00101100B 255O、377O 1234D或1234 56H、0BA3FH
名字 伪指令助记符 参数,参数, … ;注释
第四章 汇编语言 程序设计
1.标号与名字
标号是某条指令所存放单元的符号地址,它是转移(条件 转移或无条件转移)指令或调用(CALL)指令的目标操 作数。名字可以是变量、逻辑段名、子程序名等,反映变 量、逻辑段和子程序等的逻辑地址。在汇编语言源程序中, 为了使程序更具有普遍性,及便于程序的修改,用户常用 名字等代替存储单元、数据、表达式等,如例中的存储单 元 SUM、输入输出端口 PROT_VAL 等就是。 一个标识符是由最多为31个字母、数字及规定的特殊字 符(? @ _ $)等组成的,且不能用数字打头(以免与十 六进制数相混淆)。
第四章 汇编语言 程序设计
变量定义伪指令有DB、DW、DD、DF、DQ、DT。
助记
变量类型
变量定义含义
符
DB
字节
分配一个或多个字节单元,每个数据是字节量,也可以是字符串常量;
微机原理 第4章 循环与分支程序设计
循环程序设计
循环程序的结构形式 循环初始状态 循环初始状态
循环控制条件
N
循环体
Y 循环体 N
循环控制条件
Y
第4章 循环与分支程序设计
循环程序设计方法 【例1】 试编制一个程序把BX寄存器内的二进制数用十六 进制数的形式在屏幕上显示出来。 1. 如何将二进制数转换为十六进制数?
第4章 循环与分支程序设计
循环程序设计方法 【例3】 在附加段中,有一个首地址为LIST和未经排序的 字数组。在数组的第一个字中,存放着该数组的长度,数 组的首地址已存放在DI寄存器中,AX寄存器中存放着一个 数。要求编制一程序:在数组中查找该数,如果找到此数, 则把它从数组中删除。
第4章 循环与分支程序设计
Z4 = X4 – Y4
结果存入Z数组。
第4章 循环与分支程序设计
【例 5】 解题思路
此题实际上是求10个型如 X ± Y 的表达式的值,最后将
存入相应的Z单元中。
1. 为简化操作,利用表达式的特点,可使用循环;
2. 关键的问题显然是如何确定加法或减法;
3. 同时注意到X、Y和Z的下标相同,可用同一个变量或
【例 2】 程序清单
循环与分支程序设计
mov cx, 0 repeat : test ax, 0FFFFH jz exit jns shift inc cx shift : shl ax, 1 jmp repeat exit : mov COUNT, cx main endp program ends end start
【例 5】 程序清单
第4章 循环与分支程序设计
循环程序设计方法 【例6】 试编制一程序:从键盘输入一行字符,要求第一个键 入的字符必须是空格符,如不是,则退出程序;如是,则开始 接收键入的字符并顺序存放在首地址为BUFFER的缓冲区(空 格符不存入),直到接收到第二个空格符时退出程序。
微机原理与接口技术第4章
4.2.3 汇编语言的伪指令语句 (段定义伪指令)
注意事项
组合类型指定段与段之间的连接和定位
NONE: PUBLIC: COMMON: STACK: AT表达式: MEMORY:
类别型也是分类名,必须用单引号括起来,可以选 择不超过40个字符的名称。
4.2.3 汇编语言的伪指令语句 (段指定伪指令)
4.3.1 DOS和BIOS中断调用
常用的DOS调用
返回DOS(功能调用号:4CH) 键盘I/O(功能调用号:l、6、7、8、A、B、 C) 显示器I/O(功能调用号:2、6、9)
4.3.1 DOS和BIOS中断调用
BIOS中断调用
MOV AH,功能调用号 ;设置规定的入口参数 INT N
4.3.1 DOS和BIOS中断调用
4.2.1 汇编语言语句的种类极其 格式
标识符: 组成规则:
字符个数:1~31。 第一个字符必须是字母。 从第二个字符开始,可以是字母,问号“?”, “@”,数字,或下划线“_”中的一个。 不能使用系统专用的保留字。
4.2.2 汇编语言的数据
常量 变量 标号 表达式与运算符
4.2.2 汇编语言的数据(常量)
功能号 0 2 功能 设置显示方式 设置光标位置 入口参数 AL中的数表示显示方式 DH—光标行号,DL—光标列号, BH—光标页号 BH—光标页号 CX为光标类 型 DX为行列号 出口参数
3
读光标当前位置 在当前光标位置 上显示输入的字 符 设置彩色调色板 在指定位置上显 示点 在当前页上写字 符
4.2.2 汇编语言的数据(标号)
距离属性的用法
隐含方式: 使用标号后,默认为NEAR
例如:SUB1: MOV AX 30H
微机原理与接口技术习题答案4
第4章汇编语言程序设计1.已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。
解:BUF DB "BONJOUR_BELLE"BUFR DB 100 DUP(?)MOV CX, NLEA SI, BUFLEA DI, BUFRADD DI,CXDEC DIL1:MOV AL,[SI]MOV [DI],ALINC SIDEC DILOOP L12.利用移位、传送和相加指令实现AX的内容扩大10倍。
解:将扩大后的结果放在DX:AX中,注意到10×AX=8×AX+2×AX。
XOR DX,DXSHL AX, 1RCL DX, 1MOV BX,AXMOV CX,DXSHL AX, 1RCL DX, 1SHL AX, 1RCL DX, 1ADD AX, BXADC DX, CX3.在缓冲区V AR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果V AR中保存的为有符号数,则再编写程序实现将其按递减关系排列。
解:V AR DW 1236,-432,3900XOR SI,,SIMOV AX,V AR[SI]CMP AX, V AR[SI+2]JAE L1XCHG AX, V AR[SI+2]L1:CMP AX, V AR[SI+4]JAE L2XCHG AX, V AR[SI+4]L2:MOV V AR[SI], AXMOV AX,V AR[SI+2]CMP AX, V AR[SI+4]JAE L3XCHG AX, V AR[SI+4]L3:MOV V AR[SI+2], AX4.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。
微机原理及运用第4章
关系运算的操作数也必须为数字操作数。当关系成立时, 其结果为全 1;当关系不成立时,其结果为全 0。 汇编语言中的表达式不能构成单独语句, 只能是语句的 一个部分, 例如: MOVAX, BUF+2
ADDAL, VAL AND 0FH
JMPAGAIN+3 MOVBL, VB LE VA
4.1汇编语言基本概念
4.1.1汇编语言与机器语言
我们已经学过高级语言,例如BASIC语言或FORTRAN 语言,无论哪种语言,它都规定了一系列用于编写程序的语 句和应该遵循的语法规则。人们根据一种语言给定的语句及 其语法规则就可以写出程序,计算机则通过执行已编好的程 序来完成人们要求它完成的各种复杂功能。汇编语言也一样, 根据汇编语言的语句及其语法规则可以写出汇编语言程序。 但汇编语言与高级语言有较大的区别,汇编语言中的语句与 机器的种类和型号密切相关。
部分, 汇编时不形成任何目标码。注释必须以分号“;”开 头。 它可以作为语句的一个部分,也可以作为一个单独的语 句。
4.1.3汇编语言中的常数与表达式
1. 常数 常数可以分数值常数和字符串常数两类。数值常数按其 基数的不同,可以有二进制数、八进制数、十进制数、十六 进制数等几种不同的表示形式, 汇编语言中采用不同的后缀 加以区分。 B: 表示二进制数。 例如, 10110011B。
表示一条指令的这些字符常称为助记符。 我们必须指出, 采用助记符写出的程序,机器是不能直接执行的,因为上面 我们已经指出, 处理器在设计时是按二进制指令码考虑的。 所以,采用汇编语言编写的程序在执行前还必须将其“翻译” 成机器语言。通常将采用助记符指令写成的程序,称为源程 序,将它翻译成的机器语言程序称为目标程序。将汇编语言 的源程序翻译成目标程序的过程称为汇编过程或简称汇编。 汇编过程通常是由计算机完成的。它是通过执行一个专门完 成汇编的软件——称为汇编程序来实现的。既然写出的源程序 要由汇编程序将其翻译后才能执行,所以,我们编写的源程 序必须符合汇编程序的一系列要求或者规则,只有这样,你 的程序才能被正确地“翻译”。
汇编程序设计语言知识点
汇编程序设计语言知识点汇编程序设计语言是一种低级别的程序设计语言,用于编写计算机的底层代码。
它与高级语言相比,更加接近机器的指令集架构,可以直接操作计算机的硬件和寄存器。
在本文中,将介绍汇编程序设计语言的一些重要知识点。
一、汇编语言基础知识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)。
┅ K=n-1
K=n
转向0分支 转向1分支 ┅ 转向n-1分支 转向n分支
20:23
单片机技术
JMP_128:MOV A,R3
RL A MOV DPTR,#JMPTAB
JMP @A+DPTR JMPTAB:AJMP ROUT00
AJMP ROUT01
┇
┇
128个子程序首址
AJMP ROUT7F
•说明:此程序要求128个转移目的地址(ROUT00 ~ ROUT7FH)必须驻留在与绝对转移指令AJMP相同的一个 2KB存储区内。
完
完
循环控制
未完
循环体
循环修改
do while
退出循环
(a)
(b)
循环组织方式流程图
20:23
单片机技术
退出循环
while
例1:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。分析:
由于DJNZ指令最多的循环次数是256次,而1S÷256÷256 约等于
15μS,晶振频率6MHZ,则1个机器周期为2μS,我们把内循环定为
解:
ORG 1000H START:MOV A,R0
CPL A ADD A,#01H MOV R2,A MOV A,R1 CPL A ADDC A,#00H MOV R3,A SJMP $
单片机技术
二、分支程序
特点:程序分为多路,根据条件选择执行的路径
• 程序分支是通过条件转移指令实现的,即根据条件对程序的 执行进行判断、满足条件则进行程序转移,不满足条件就顺 序执行程序。
• 机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。 汇编工作由机器自动完成,最后得到以机器码表示的目标程 序。
20:23
单片机技术
三、反汇编
• 将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。
汇编(汇编程序)
源程序 (汇编语言)
目标码 (机器语言)
反汇编(汇编程序)
图4-3 汇编和反汇编过程
SJMP STORE
BIG:
JC STORE
MOV A,TWO
STORE: MOV RES,A
SJMP $
单片机技术
• 例3: 多分支转移程序。 • 功能:根据入口条件转移到128个目的地址。 • 入口:(R3)=转移目的地址的序号00H~7FH。 • 出口:转移到相应子程序入口。
散转指令
K=0
K=1 ┅
INC R0
;(R0)+1 →R0
MOV A,20H ;(20H)→A
SWAP A,
;A0~3 ← →A4~7
ANL A,#0FH ;A∧#0FH→A
MOV @R0,A ;(A)→(R0)
SJMP $
20:23
单片机技术
20:23
例3:16位数求补。设16位二进制数在 R1R0中,求补结果存于R3R2中。
MAIN:
ORG 0000H LJMP MAI ORG 0030H MOV A,#02 LCALL CH_TA SJMP $
• DS
• BIT
20:23
单片机技术
汇编起始命令
• 格式:ORG 16位地址 • 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目
标程序存放的起始地址。
2.END 汇编结束指令
0033 80FE
SJMP $
0000
END
也可以规定数据表格存放的起始地址。
20:23
单片机技术
3.EQU 赋值命令
• 格式:字符名称 EQU 项(数或汇编符号)
• 功能:把“项”赋给“字符名称”。
• 注意:字符名称不等于标号(其后没有冒号);其中的项,可 以是数或汇编符号。EQU赋值过的符号名可以用作数据、代码 地址、位地址或一个立即数。可以是8位的,也可以是16位的。
图。 • 流程图常采用的图形和符号。
20:23
单片机技术
椭圆框 矩形框 菱形框
圆圈 指向线
20:23
或桶形框
:表示程序的开始或结束。
:表示要进行的工作。
:表示要判断的事情,菱形框内 的表达式表示要判断的内容。
:表示连接点 :表示程序的流向
单片机技术
§4.1.2 编程的方法和技巧
一、模块化的程序设计方法
20:23
单片机技术
二、确定算法
• 算法是如何将实际问题转化成程序模块来处理。 • 在编程以前,先要对几种不同的算法进行分析、比较,找
出最适宜的算法
三、画程序流程图
• 程序流程图是使用各种图形、符号、有向线段等来说明程 序设计过程的一种直观的表示。
• 流程图步骤分得越细致,编写程序是也越方便。 • 画流程图是程序结构设计是采用的一种重要手段。 • 一个系统软件有总的流程图(主程序框图)和局部的流程
• 例1:
• AA EQU R1
20:23
单片机技术
§4.2.3 伪指令
• 伪指令不是真正的指令,无对应的机器码,在汇编时不产生 目标程序,只是用来对汇编过程进行某种控制。
• 89C51有8个伪指令:
• ORG • END • EQU • DATA • DB • DW
0000 0000 020030 0030 0030 7402 0032 120100 0035 80FE
用。
20:23
单片机技术
2、划分模块的原则
• 每个模块应具有独立的功能,能产生一个明确的结果,即 单模块的功能高内聚性。
• 模块之间的控制耦合应尽量简单,数据耦合应尽量少,即 模块间的低耦合性。控制耦合是指模块进入和退出的条件 及方式,数据耦合是指模块间的信息交换方式、交换量的 多少及交换频繁程度。
20:23
单片机技术
例3:统计字串长度。内存从STRING开始有一字串,该 字串以$(ASCII码为24H)结束,试统计该字串长度, 结果存于NUM单元中
解:
ORG 0800H
NUM DATA 20H
STRING DATA 21H
START: LOOP:
CLR A MOV R0,#STRING CJNE @R0,#24H,NEXT
1、程序功能模块化的优点
• 单个模块结构的程序功能单一,易于编写、调试和修改。 • 便于分工,从而可使多个程序员同时进行程序的编写和调试
工作,加快软件研制进度。 • 程序可读性好,便于功能扩充和版本升级。 • 对程序的修改可局部进行,其它部分可以保持不变。 • 对于使用频繁的子程序可以建立子程序库,便于多个模块调
• 模块长度适中。20条~100条的范围较合适。
20:23
单片机技术
二、编程技巧
1、尽量采用循环结构和子程序。 2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于存放子程序
入口参数的寄存器外,子程序中用到的其他寄存器的内容应 压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器外, 还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中, 一般不必把累加器内容压入堆栈。
﹕
AJMP LOOP0 AJMP LOOP1
﹕
AJMP LOOPn
20:23
单片机技术
三、循环程序
特点:部分程序段反复循环执行,关键是循环控制。
其结构包括四部分: 1、置循环初值 2、循环体(循环工作部分) 3、修改控制变量 4、循环控制部分
20:23
单片机技术
置初值
置初值
循环体
循环修改
未完
循环控制
• 汇编:将汇编语言源程序转换为机器码表示的目标程 序的过程。对单片机有: 手工汇编、机器汇编、反汇编
20:23
单片机技术
汇编语言 源程序
汇编
目标程序
一、手工汇编
汇编程序
• 通过手工方式查指令编码表,逐个把助记符指令“翻译”成 机器码,然后把得到的机器码程序键入单片机,进行调试和 运行。
二、机器汇编
单片机技术
20:23
例2:片内RAM ONE和TWO两个单元中存有两个无 符号数,将两个数中的小者存入RES单元。
解: ORG 1000H
ONE DATA 22H ;定义ONE
TWO DATA 23H ;定义TWO
RES DATA 30H ;定义RES
MOV A,ONE
START:
CJNE A,TWO,BIG
20:23
单片机技术
例2:数据块传送。将片内RAM 20H单元开始的10个字 节,传送到片外RAM 1000H单元开始的单元中去。
解:
ORG 0800H START:MOV R0,#20H
MOV DPTR,#1000H MOV R7,#0AH LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP SJMP $
•RL指令对变址部分乘以2,因为每条AJMP指令占两个字节。
20:23
单片机技术
例4:多分支结构,由40H单元中动态运行结果选择分支。 当分支数目超过128时
START:
TABEL: Addr16:
MOV DPTR,# Addr16 MOV A, 40H CLR C RLC A JNC TABEL INC DPH JMP @A+DPTR
20:23
单片机技术
例2 :拆字。将片内RAM 20H单元的内容拆成两段,每 段四位。并将它们分别存入21H与22H单元中。
解: START:
ORG 2000H
MOV R0,#21H ;21H→R0
MOV A,20H
;(20H)→A