汇编语言程序设计
汇编语言程序设计

汇编语⾔程序设计第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章 汇编语言程序设计
例4.4 显示两位压缩BCD码值(00~99) ,要求不显示前导0。 本例一方面要排除前导0的情况,另一方面 对于全0情况又必须显示一个0,所以形 成了两个双分支结构的程序。
第4章 汇编语言程序设计 DATA SEGMENT BCD DB 04H ; 给出一个BCD码数据 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA BEGIN: MOV AX, DATA MOV DS, AX MOV DL,BCD ;取BCD码 TEST DL,0FFH ;如果这个BCD码是0,则显示为0 JZ ZERO TEST DL,0F0H ;如果这个BCD码高位是0,不显示 JZ ONE MOV CL,4 ;BCD码高位右移为低位 SHR DL,CL OR DL,30H ;转换为ASCII码 MOV AH,2 ;显示 INT 21H
第4章 汇编语言程序设计 ADC MOV MOV MUL ADD DX,0 W+4,DX AX,A B+2 W+2,AX ;部分积2的高16位与进位相加 ;结果保存到从W+4开始的内存单元 ;取被乘数的低16位 ;与乘数的高16位相乘,得到部分积3 ;部分积3的低16位与W+2开始的内存单元相加 ;结果保存在从W+2开始的内存单元 ;部分积3的高16位与W+4开始的内存单元及 ;进位相加,结果保存在从W+4开始的内存单元 ;把进位值保存在从W+6开始的内存单元 ;取被乘数的高16位 ;与乘数的高16位相乘,得到部分积4 ;部分积4的低16位与W+4开始的内存单元相加 ;结果保存在从W+4开始的内存单元 ;部分积4的高16位与W+6开始的内存单元及 ;进位相加,结果保存在从W+6开始的内存单元
汇编语言程序设计实验要求

汇编语言程序设计实验要求一、实验目的1.理解计算机的基本组成结构和运行原理;2.掌握汇编语言的基本语法和应用;3.学会使用汇编语言设计并实现简单的程序;4.培养分析和解决问题的能力。
二、实验内容根据实验的具体要求,设计并实现汇编语言程序,要求程序的功能和执行效果符合实验要求。
三、实验要求1.完成实验报告,并按照实验报告模板的要求编写。
2.实验过程中能提出并解答问题的,要及时记录下来。
3.实验过程中发现的问题要及时上报和解决。
4.保持实验室设备的安全性和完好性。
四、实验步骤1.紧密结合课程内容,理清实验的基本思路和需求。
2.设计程序的框架和算法,明确每个步骤的功能和实现方法。
3.编写汇编语言程序的代码,注意代码的规范性和可读性。
4.进行程序的编译和调试,确保程序能够正确运行并得到正确的结果。
5.运行程序,观察程序的执行过程和结果是否符合设计要求。
五、实验评分标准1.实验报告的撰写质量(包括格式、内容、语言表达等)占总分的30%。
2.汇编语言程序的设计和实现质量占总分的50%。
3.程序的运行效果和正确性占总分的20%。
六、实验注意事项1.在编写汇编语言程序时,要注意程序的可读性和可维护性。
2.在程序的编译和调试过程中,要保持对程序的追踪和记录。
3.注意程序的输入和输出的正确性和合法性。
4.在实验过程中,要积极与实验指导教师和同学之间进行交流和讨论。
以上就是汇编语言程序设计实验的要求。
通过这门实验课程的学习和实践,我们能够更加深入地了解计算机体系结构和汇编语言的基本原理和应用,从而为我们今后的学习和工作打下坚实的基础。
希望同学们在实验中能够认真学习和探索,通过实践提高自己的动手能力和问题解决能力。
第4章 汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)
第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
第4章 汇编 语言程序设计

DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处 NOP
HERE:SJMP
HERE
上述4个字段应该遵守的基本语法规则如下。
10
1.标号字段
语句所在地址的标志符号,才能被访问。如标号 “START”和“LOOP”等。有关标号规定如下: (1)标号后必须跟冒号“:”。 (2)标号由1~8个ASCII码字符组成,第一个字符必须是
8
汇编语言语句是符合典型的汇编语言的四分段格式:
标号字段 (LABLE) 操作码字段 (OPCODE) 操作数字段 (OPRAND) 注释字段 (COMMENT)
标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔;
操作数字段和注释字段之间的分界符用分号“;”。
表示的机器语言程序,才能识别和执行。
完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得 到的以“0”、“1”代码形式表示的机器语言程序称为目标 程序。
5
优点:用汇编语言编写程序效率高,占用存储空间小,运行 速度快,能编写出最优化的程序, 缺点:可读性差,离不开具体的硬件,是面向“硬件”的语 言通用性差。 2.高级语言
功能是把P1.6的位地址赋给变量QA。
4.2
汇编语言源程序的汇编
“汇编”?汇编可分为手工汇编和机器汇编两类。
22
4.2.1
手工汇编
通过查指令的机器代码表(表3-2),逐个把助记符指令 “翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易出 错,只有小程序或受条件限制时才使用。实际中,多采用“ 汇 编程序”来自动完成汇编。
16
重叠。例如:
ORG …… ORG …… ORG …… 2000H 2500H 3000H
第4章 单片机汇编语言程序设计

RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000
汇编语言程序设计

标号有三种属性:
1. 段属性(SEGMENT): ●表示标号所在段的段基址。
2. 偏移属性(OFFSET): ●表示标号的偏移地址,即标号地址在逻辑段中距段的起始点的字节数。
3. 距离属性(或类型属性 TYPE): ●表示标号作为段内或段间的转移属性。
变量名、标号和一些专用符号等。
●注释字段 这是一个任选字段,它必须以分号开始,和指令语句的注释功能一样。
精选课件
5.2.2 常用伪指令
1. 符号定义伪指令(赋值语句)
(1)等值伪指令 格式:符号名 EQU 表达式 功能:将表达式的值赋给符号名。
[例5-11]
ALFA COUNT
EQU EQU
100 ALFA
精选课件
; CONT =60 ; CONT =7 ; CONT =1 ; AL = 84H
逻辑运算符
●包括按位操作的与(AND)、或(OR)、异或(XOR)、和 非(NOT)四种运算符。它们只适用于对常数进行逻辑运算。
注意: ● AND、OR、XOR和NOT也是指令助记符。
[例5-2] AND DX, PORT AND OFEH
精选课件
分析操作符(数值返回运算符)
(1)取地址的偏移量
(2)取段基址
格式: OFFSET 变量名或标号
功能:取变量名或标号所在段的 段内偏移量。
格式: SEG 变量名或标号
功能:取变量名或标号所在段 的段地址。
(3) 求变量名或标号的类型值
格式:TYPE 变量名或标号 功能: 返回一个数字值。若TYPE运算符加在变量名前,返回的数值是该变量 的类型属性;若TYPE运算符加在标号前,返回的数值则是该变量距离 属性;返回的数值与性的关系表4-1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言基础《汇编语言程序设计》第01章在线测试《汇编语言程序设计》第01章在线测试剩余时间:49:50答题须知:1、本卷满分20分。
2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。
3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)1、一个字节的二进制位数是____位。
A、4B、8C、16D、322、微机中每个存储单元具有一个地址,其中存放一个____量。
A、比特(1位)B、字节(8位)C、字(16位)D、双字(32位)3、设段地址为5788H,偏移地址为94H,该字节的物理地址_____。
A、57974HB、5883HC、58ECHD、57914H4、汇编语言源程序中,每个语句由4项组成,不影响语句功能的是_____。
A、名字项B、助记符(操作码)C、操作数D、注释5、下列标号不合法的是_____。
A、WANGB、MOVC、F4D、ABC3第二题、多项选择题(每题2分,5道题共10分)1、汇编语言的优点包括_____。
A、直接有效地控制硬件B、生成的代码序列短小C、运行速度快D、编程容易E、便于移植2、8086段寄存器有_______。
A、IPB、DSC、CSD、ESE、SS3、使用MASM 6.x版本的“ML /Fl eg101.asm”命令,如果源程序eg101.asm没有语法错误,则将生成_________文件。
A、目标代码文件B、可执行文件C、列表文件D、调试文件E、库文件4、汇编语言中,______可以作为有效的名字,如标号、变量名等。
A、0fffhB、var00C、loop1D、testE、add5、汇编语言中,程序员不能将______作为用户标识符。
A、DSB、byteC、againD、callE、SS第三题、判断题(每题1分,5道题共5分)1、8086是Intel公司的第一个16位结构的微处理器芯片。
正确错误2、有效地址是指存储器操作数的物理地址。
正确错误3、采用汇编语言书写的一个ASM源程序文件,需要使用汇编程序,例如MASM转换为OBJ目标代码文件。
正确错误4、8088按逻辑段组织程序,需要执行的指令应该在代码段中。
正确错误5、使用简化段定义源程序格式,必须具有.model语句,且位于所有简化段定义语句之前。
正确错误《汇编语言程序设计》第02章在线测试《汇编语言程序设计》第02章在线测试剩余时间:58:54答题须知:1、本卷满分20分。
2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。
3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)1、在汇编语言中,如下各个进制常数,______是错误的。
A、64B、64HC、A0HD、0100B2、伪指令DW定义的是______量的变量。
A、字节B、字C、双字D、4字3、将变量var定义如下,“var db 26h, 4ah”,欲以字属性存取该变量值,应采用______var。
A、offsetB、byte ptrC、word ptrD、seg4、语句“xyz db ˊABˊ, ˊCDˊ, ˊEˊ,ˊFˊ”汇编后占用的存储空间是______个字节。
A、4B、5C、6D、85、在伪指令语句“number dw 1234h”中的number 项称为______。
A、标号B、操作符C、名字D、操作数第二题、多项选择题(每题2分,5道题共10分)1、如下________寻址方式的操作数来自主存储器。
A、立即数寻址B、寄存器寻址C、直接寻址D、寄存器相对寻址E、寄存器间接寻址2、“mov [bx+10h],al”指令的两个操作数采用的寻址方式有_______。
A、寄存器间接B、寄存器C、寄存器相对D、基址变址E、立即数3、能够取得变量VAR偏移地址给BX的语句有______。
A、mov bx, varB、mov bx, offset varC、mov bx, seg varD、mov bx, org varE、lea bx,var4、获取变量地址类型值的操作符有____。
A、segB、typeC、offsetD、sizeofE、lengthof5、在汇编语言程序定义常量max等于100,正确的表达是______。
A、max = 100B、max equ 100C、max db 100D、max dw 100E、max org 100第三题、判断题(每题1分,5道题共5分)1、MASM规定用后缀字母H或h表达十六进制数据。
正确错误2、语句“mov al,ffh”没有语法错。
正确错误3、对于常数41H,在汇编语言中表达成字符’A’也是正确的,因为’A’的ASCII码就是41H。
正确错误4、“wvar dw 5 dup(0)”伪指令定义的变量wvar占用10个字节存储空间。
正确错误5、已知var是一个变量,语句“mov si,word ptr var”是一条正确的语句,即无语法错误。
正确错误《汇编语言程序设计》第03章在线测试《汇编语言程序设计》第03章在线测试剩余时间:56:05答题须知:1、本卷满分20分。
2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。
3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)1、假设V1和V2是用DW定义的变量,下列指令中正确的是______。
A、mov V1,20hB、mov V1,V2C、mov al,V1D、mov 2000h,V22、某次求和运行结果为0时,ZF=_____。
A、0B、1C、任意D、不影响3、某次求和结果最高位为1,则SF=_______。
A、0B、1C、任意D、不影响4、指令_______实现对AX当中D15和D0位设置为0,其他位不变的功能。
A、and ax,7ffehB、or ax,8001hC、xor ax,8001hD、not ax5、设AX=ABDFH,则在执行指令“AND AX, 0lH”后,AX寄存器的内容为______。
A、ABDFHB、FFFFHC、0001HD、0000H 第二题、多项选择题(每题2分,5道题共10分)1、下面的XCHG指令中,语法不正确的有____。
A、xchg al, dsB、xchg bl, [bx]C、xchg al, 0fhD、xchg buf1, buf2E、xchg bl,bh2、下面正确的指令是_____。
A、add al, ahB、add [bx+3], alC、add ah, [di]D、add [ax], bxE、add ax,[dx]3、8086CPU的控制标志有______。
A、CFB、TFC、OFD、DFE、SF4、下列指令中属于8086位操作类的指令有_______。
A、TESTB、CMPC、SHRD、INCE、ROL5、通常指令执行后都会修改目的操作数,但______等指令并不改变目的操作数。
A B C D EA、TESTB、ADCC、ANDD、DECE、CMP第三题、判断题(每题1分,5道题共5分)1、“mov ax,6735h”指令执行后,AL=35H 。
正确错误2、“mov ax,6735h”指令执行后,AL=67H 。
正确错误3、执行“test ax,bx”后,AX和BX寄存器内容都没有改变。
正确错误4、符号扩展将数据位数加长,自然数据大小也相应增大。
正确错误5、指令“mov [si],[di]”是错误的,因为8088CPU不存在这种传送组合。
正确错误《汇编语言程序设计》第04章在线测试第一题、单项选择题(每题1分,5道题共5分)1、在一段顺序结构的程序中,不应该出现的指令是______。
A、divB、addC、jzD、mul2、JCXZ指令发生转移的条件是______。
A、CX=0B、CX≠0C、ZF=0D、ZF=13、下面程序段条件转移语句发生跳转的条件是AL=______。
cmp al,0fbh jnl nextA、80hB、8fhC、0f0hD、0ffh4、设置CX=100后,语句“delay: loop delay”会循环执行______次。
A、0B、99C、100D、1015、2号DOS功能调用需要利用DL传递字符,这是子程序所谓的_______传递方式。
A、立即数B、变量C、寄存器D、堆栈第二题、多项选择题(每题2分,5道题共10分)1、无条件转移JMP指令支持的目标地址寻址方式有___。
A、相对寻址B、寄存器间接寻址C、存储器间接寻址D、直接寻址E、立即数寻址2、“loop cont”指令可以用两条指令代替,它们是______。
A、inc cxB、dec cxC、jz contD、jnz contE、jmp cont3、利用过程定义伪指令设计的子程序,通常包括_______语句。
A、callB、retC、procD、endpE、endm4、子程序的入口参数可以通过_______等传递。
A、中断调用号B、寄存器C、变量D、堆栈E、立即数5、过程定义伪指令定义的过程名可能具有_______属性。
A、BYTEB、WORDC、DWORDD、FARE、NEAR第三题、判断题(每题1分,5道题共5分)1、在双分支程序段中,两个分支语句之间的JMP指令的功能是使第一个分支语句执行完成之后,跳过第二个分支语句。
避免误入第二个分支语句。
正确错误2、子程序不能进行嵌套调用。
正确错误3、带有出口参数的寄存器,子程序不能在进入时进行保护,在返回主程序前也不能恢复。
正确错误4、进入子程序后,将AX、BX、CX和DX按顺序压入堆栈,则子程序返回前弹出这些寄存器的顺序是DX、CX、BX、AX。
正确错误5、进入子程序后,将AX、BX、CX和DX按顺序压入堆栈,则子程序返回前弹出这些寄存器的顺序还是AX、BX、CX、DX。
正确错误。