汇编语言学习第5章
第5章 顺序结构程序设计
LDS BX, TABLE
; (BX)=0040H
; (DS)=3000H
LES BX, TABLE
; (BX)=0040H
注意:
* 不影响标志位 * REG 不能是段寄存器 * SRC 必须为存储器寻址方式
; (ES)=3000H
标志寄存器传送指令
标志寄存器传送指令用来传送标志寄存器
0000 1001 + 0111 1100 1000 0101
带: ( +9 ) + ( +124 ) = -123 OF = 1 无: 9 + 124 = 133 CF = 0 带符号数溢出
例5.9 编程序实现两个双精度数 20034980H和1008E699H加法运算
;5-1.asm XLAT EXAMPLE 查十六进制数的ASCII码表
DATA SEGMENT TABLE DB 30H,31H,32H,33H,34h,35h,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H HEX DB 3 ;要查的十六进制数 ASCII DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLE MOV AL,HEX XLAT MOV ASCII,AL MOV DL,AL MOV AH,02H INT 21H 显示单个字符! MOV AH,4CH INT 21H CODE ENDS END START
带:( +4 ) + ( +11 ) = +15 OF = 0 无:4 + 11 = 15 CF = 0
第5章习题解答
第5章汇编语言程序设计习题参考答案1.(1) BUFF DB 240 DUP(?)(2) xx DB “BYTE”,”WORD”2.:0000H,则内存分配如下:V AR1V AR2V AR3V AR4V AR53.(1) 段的类型:段的类型有4种,分别是代码段、数据段、堆栈段和附加段。
(2) 段的定义:定义段使用伪指令SEGMENT/ENDS来定义的。
即:段名SEGMENT [定位类型] [组合类型] […类别‟]……段名ENDS(3) 选项的作用和含义:定位类型:告诉汇编程序如何确定逻辑段的边界在存储器的位置,共有4种。
①BYTE:表示逻辑段从字节的边界开始,即本段的起始地址紧接前一段。
②WORD:表示逻辑段从字的边界开始,即本段的起始地址必须是偶数。
③PARA:表示逻辑段从节的边界开始,即本段的起始地址后4位为0。
④PAGE:表示逻辑段从节的边界开始,即本段的起始地址后8位为0。
组合类型:告诉汇编程序当装入存储器时各个逻辑段如何进行组合,共有6种。
①不组合:如果缺省,则不组合。
② PUBLIC:对于不同逻辑段只要有相同段名就把他们集中成一段装入内存。
③ STACK:同PUBLIC相同,但仅限于堆栈段。
④ COMMON:对于不同逻辑段若有相同的段名,则都从同一地址装入。
⑤ MENORY:表示在几个逻辑段连接时,本段定位在地址最高的地方。
⑥ AT 表达式:表示以表达式的值来定位段地址。
‘类别’:在连接时决定各逻辑段的装入顺序。
4. 假设程序中有4个不同类型的段,则名为initprogram宏指令的宏定义如下:initprogram MACRO csname,dsname,esname,ssnameASSUME CS:csname,DS:dsname,ES:esname,SS:ssnameSTART: MOV AX,dsnameMOV DS,AXMOV AX,esnameMOV ES,AXMOV AX,ssnameMOV SS,AXENDM5.假设需传送的数据块为字节数据块,则名为Datastranaction宏指令的宏定义如下:Datastranaction MACRO buffer1,buffer2,lengthLEA SI,buffer1LEA DI,buffer2MOV CX,lengthCLDREP MOVSBENDM6.有效地指令为:(2)、(5)、(9)无效的指令为:(1) 数据类型不一致(3) 两个操作数不能同时为存储器操作数(4) CS不能作为目的操作数(6) 不能用两个变址寄存器作有效地址分量(7) 一个操作数不能是两个变量名的表达式(8) 基址和变址只能相加不能相减(10) 目的操作数不能是立即数(11) 在有效地址中不能减基址或变址严格地说:(9)也不对,因为没有指出存储器的数据类型,即操作数类型不明确。
第五章 DSP的汇编指令..
第五章 TMS320C55x系列DSP的汇编指令
(2) 用户自定义的双指令的并行
这两条指令的并行是通过用户或C编译器定义的。两条指令 同时执行两个操作,用并行符“||”区分并行执行的两条指令。 例:
MPYM *AR1+, *CDP, AC1 ;D单元的一个MAC来完成
||XOR AR2,T1
;A单元的ALU来完成
第五章 TMS320C55x系列DSP的汇编指令
1、高速数字信号处理中常采用汇编语言编程。 2、汇编语言中的两种指令集 (1) 助记符指令集:有助于记忆的符号来表示指令。 (2) 代数指令集:类似于代数表达式,运算关系清楚明了。 注意:DSP的软件开发工具只支持单一的指令形式,不支持助记
符指令和代数指令的混合形式。 3、术语、符号和缩写见P93的表5-1 4、运算符见表5-2
令执行的条件:
TCx(测试/控制标志为1) !TCx(测试/控制标志为0)
TC1&TC2 TC1&!TC2 TC1|TC2 TC1|!TC2 TC1^TC2 TC1^!TC2
!TC1&TC2 !TC1&!TC2 !TC1|TC2 !TC1|!TC2 !TC1^TC2 !TC1^!TC2
第五章 TMS320C55x系列DSP的汇编指令
4、双16比特算术指令: [(1)语法、(2)操作数、(3)状态位] 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16
比特算术运算,包括加-减、减-加、两个加和两个减运算。
例:
说明: NO:不能并行执行 3:指令的长度为3字节 1:周期为1 X:在X(执行)流水线阶段处理
D – ALU:在D单元ALU执行。 执行结果:AC0=(*AR3)+CARRY+AC1 状态位: Affected by CARRY,C54CM,M40等
汇编语言程序设计_第5章 分支循环程序设计(参考答案)
第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。
程序调试的方法,常见问题的程序设计方法。
一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。
A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。
A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。
A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。
A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。
A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。
A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。
A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。
A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。
A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。
A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。
第5章 指令与指令系统和汇编语言程序设计(2)
运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果,6个大写的英文字母 已经被修改为小写字母: 0061 0062 0063 0064 0065 0066
汇编语言程序设计
1 将寄存器R2和R3的内容相加,结果存入R0。 2 将寄存器R2和R3的内容相加,如果有进位,寄存器R0的内 容置1,否则置0 3 若R1的内容是负数则置R0为-1,否则置0(提示:用TEST) 4 检测R3的是奇数,R0的内容置为1,否则置为0。(提示: 用移位检测C的方法来测量一位) 5 将内存中1000H起始的10个单元的内容取出加2送入原地址。 6 已知内存中1000H起始的10个单元中的数是ASC码,将其取 出送显示。 7 将键盘录入的数存到内存1000H单元中。 8 将键盘录入的10个数存到内存1000H-1009H。
有寄存器寻址,寄存器间接寻址等7种。
从表5.1中可以看出, (A组) INC DR 单操作数(DR的内容加1) (B组) LDRR DR,[SR] 双操作数 (DR [SR])
(4)从指令的功能区分
有运算、读写内存类指令,输入输出指令,转移 指令,子程序调用指令,置进位标志指令等。
从表5.1中可以看出, (A组) ADD DR ,SR 加运算 (B组) LDRR DR,[SR] 读写内存
41 42 43 44 45 46
A 2080
MVRD R3, 0006 ;指定被读数据的个数
MVRD R2, 20F0 ;指定被读、写数据内存区首地址
(2084) LDRR R0, [R2]
;读内存中的一个字符到R0寄存器
CALA 2100 ;调用子程序(入口地址为2100),完成显示、
第5章 汇编语言程序
Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。
微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例
/webnew/
第5章 运算程序设计及应用举例 章
5.1.4 除法指令 1.无符号数除法指令DIV (Unsigned Divide Instruction) 指令格式:DIV SRC (AX) (SRC) (AX)/(SRC)商、AH AH (AX) (AX)/ 功能:如果SRC是字节操作数,则把AX中的无符号数除以SRC,得到8位 的商送AL中,8位的余数送AH中,即:AL AL 8 AH AL (SRC)余数。 如果SRC是字操作数,则把DX和AX中的无符号数除以SRC,得到16位的 商送AX中,16位的余数送DX中,即:AX (DX,AX)/(SRC)余数。 指令对标志位的影响无定义。 (DX,AX)/(SRC)商、DX
IMUL指令除了运算对象是有符号数之外,其它都与MUL指令一样,但计算结果 不同。如果乘积的高半部分有符号扩展,则CF=OF=0,否则CF=OF=1。 例5.8 有符号数0B4H与11H相乘。 MOV AL,0B4H MOV BL,11H IMUL BL ;(AL)=0B4H=-76D ;(BL)=11H=17D ;AX)=(AL)×(BL)=(-76)×17=-1292D=0FAF4H ;CF=OF=1
/webnew/
第5章 运算程序设计及应用举例 章
例5.4 DATA SUB1 SUB2 SUB3 DATA 双精度数带借位减法运算。 SEGMENT DW 7788H,5566H DW 3344H,1122H DW 0,0 ENDS … MOV AX,SUB1 SUB AX,SUB2 MOV SUB3,AX MOV AX,SUB1+2 SBB AX,SUB2+2 MOV SUB3+2,AX …
/webnew/
第5章 运算程序设计及应用举例 章
汇编语言-第二版-王爽-完整答案
汇编语言-第二版-王爽-完整答案第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。
(2)1KB的存储器有1024个存储单元。
存储单元的编号从0到1023。
(3)1KB的存储器可以存储1024*8个bit,1024个Byte。
(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。
(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。
王爽《汇编语言》 第5章 [BX]和LOOP指令
(21006H)=BEH
CS:CODE : SEGMENT 循环控制指令LOOP 二、循环控制指令 MOV AX,2 , 作计数器控制程序的循环。 用CX作计数器控制程序的循环。 作计数器控制程序的循环 MOV CX,11 , 格式: 格式:LOOP 标号 ;CX≠0循环 循环 S: ADD AX,AX : , 功能: )-1; 功能:当CX≠0时,( )=(CX)- ;转移到标号处 时,(CX) ( )- LOOP S 循环执行。 利用 循环执行。 利用LOOP指令编程计算 12 指令编程计算2 指令编程计算 MOV AX,4C00H , INT 21H 2:编程,用加法计算123×236,结果存在AX中 例2:编程,用加法计算123×236,结果存在AX中。 CODE ENDS END ASSUME CODE CX和LOOP指令配合实现循环功能的三个要点: 和 指令配合实现循环功能的三个要点: 指令配合实现循环功能的三个要点 1、在CX中存放循环次数 、 中存放循环次数 2、LOOP指令中的标号所标识地址要在前面 、 指令中的标号所标识地址要在前面 3、要循环执行的程序段写在标号和LOOP指令之间。 、要循环执行的程序段写在标号和 指令之间。 指令之间
七、一段安全的空间
汇编语言程序直接面向机器, 汇编语言程序直接面向机器,如果我们要向 内存空间写入数据时, 内存空间写入数据时,要保证所写入的内存中没 有重要的数据,否则会影响系统的正常运行, 有重要的数据,否则会影响系统的正常运行,在 一般的PC机中都不使用 机中都不使用0: 一般的 机中都不使用 :200—0:300这段内存 : 这段内存 空间,所以我们可以放心使用这段安全的空间。 空间,所以我们可以放心使用这段安全的空间。
一、[BX]
第五章_汇编语言程序设计基础
§5-1 汇编语言的基本概念
汇编 语言 源程 序 汇编 程序 A ss em bl er 机器 语言 目标 程序
汇编语言指令与机器指令之间有一一对应的关系,所以汇 编语言与具体的机器密切相关,是一种面向机器的语言。 不同机器(CPU)的汇编语言不同。 为方便编程,实际的汇编程序常还提供一些除机器指令以 外的命令,被称为伪指令。伪指令(Pseudo Instruction) 仅在汇编过程中指导汇编程序如何生成目的代码,自己本 身并没有对应的机器代码。 汇编语言的指令(语句)包含两类:硬指令或真指令(指 令语句)和伪指令(指示性语句) 。
12
§5-2 汇编语言的基本语言成分
6. 综合运算符(改变属性运算符):由已存在的存储器操作数 (变量/标号)生成一个段地址和位移量相同、类型不同的新 的存储器操作数(变量/标号)。 (1) 改变变量/标号的类型: 格式: 新类型 PTR 变量/标号 功能:把PTR左边的属性赋给右边的变量/标号 [例] 设变量XVAR是字节属性,现把它的两个字节内容送 到AX中起去。 MOV AX , WORD PTR XVAR (2) 定义当前存储单元的类型: 格式: THIS 类型 功能:可用于建立新类型的存储器变量,但不分配新的存 储空间,它的段地址和位移量是汇编时的当前值。 [例] WBUFFER EQU THIS WORD BUFFER DB 100 DUP(?)
17
§5-3 汇编语言源程序的结构
(3) 段的类别属性:通常使用的类别名是‘CODE’、 ‘DATA’、‘STACK’,分别指明是代码段、数据段、 堆栈段;但也允许用户自定义类别名。类别名必须用单引 号括起来。 连接程序在组织段时,将所有同类别的段集中在一起, 进行相邻分配。 2. 段寄存器说明伪指令(ASSUME): 格式: ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:告诉汇编程序,段名所指的段由那一个段寄存器寻 址,即建立段与段寄存器的关系。 说明:段寄存器的实际值(CS除外)还要由数据传送令在 执行程序时赋值。
第5章(6)微机原理与接口技术(第三版)(王忠民)
MAIN PROC FAR ASSUME CX:CODES, DS:DATAS, SS:STACS START: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATAS MOV DS, AX
第5章 汇编语言程序设计
MOV MOV LOOPT:INC ADD CMP JBE MOV MOV RET MAIN ENDP CODES ENDS END START
第5章 汇编语言程序设计
循环控制方法举例
⑴ 用计数控制循环
[例] 在xx单元开始的连续单元中存放有 10个无符号字节数,从中找出最大者送yy单元。
由题意可直接写出数据段如下:
DATA SEGMENT xx DB
49,38,65,12,97,13,55,27,28,85 yy DB ?
DATA ENDS
第5章 汇编语言程序设计
开始
BX←xx的有效地址, AL←[BX],CX←9
BX←BX+1
AL≥ [BX]?
Y
N AL,[BX]中的数交换
CX←CX-1
N CX=0? Y yy←AL
结束
从一批数中求最大者流程图
第5章 汇编语言程序设计
DATA SEGMENT xx DB 49,38,65,12,97,13,55,27,28,85 yy DB ?
汇编语言第5章作业答案
习题51.试说明以下指令中各操作数的寻址方式,如果是存储器寻址,请给出其EA计算公式,并说明所使用的段寄存器。
(1)MOV AL,08H 源操作数:立即数寻址目的操作数:寄存器寻址(2)MOV [0120H],BL 源操作数:寄存器寻址目的操作数:直接寻址,EA=0120H,使用DS段寄存器(3)ADD [BX],AL 源操作数:寄存器寻址目的操作数:寄存器间接寻址,EA=(BX),使用DS段寄存器(4)PUSH [SI]0200H 源操作数:变址寻址,EA=(SI)+0200H,使用DS段寄存器目的操作数:隐含寻址(指令中未直接体现)(5)SUB AX,[BP] 源操作数:寄存器间接寻址,EA=(BP),使用SS段寄存器目的操作数:寄存器寻址(6)AND V AR1+4,DL 源操作数:寄存器寻址目的操作数:直接寻址,EA=V AR1+4,使用DS段寄存器(7)PUSHF 源操作数、目的操作数均为隐含寻址(8)MOV ES : [BX]0100H, AL 源操作数:寄存器寻址目的操作数:基址寻址,EA=(BX)+0100H,用ES段寄存器(9)ADC BYTE PTR [BP][SI]0210H,45H源操作数:立即数寻址目的操作数:基址变址寻址,EA=(BP)+(SI)+0210H,使用SS段寄存器(10)OR ARRY[BX][DI],CL源操作数:寄存器寻址目的操作数:基址变址寻址,EA=(BX)+(DI)+ARRY,使用DS段寄存器2.试分析下列汇编指令是否存在语法错误,如果有语法错误存在,请说明是怎样的错误。
(1)PUSH 8243H错误,单操作数指令不能使用立即数(2)POP AL错误,进栈、出栈指令的操作数应为16位(3)MOV AL,6543H错误,源、目的操作数类型不匹配(4)ADD [0100H],64H错误,目的操作数应使用PTR运算符指出类型,否则具有二义性正确的写法:ADD BYTE PTR [0100H],64H,(或使用WORD PTR)(5)ADC V AR1,V AR2错误,8086指令系统的双操作数指令中,必须有一个是寄存器,不能两个操作数同为内存单元(6)MOV DS,ES错误,段寄存器间不能使用MOV指令直接传递数据,必须通过通用寄存器作为中转(7)MOV DS,0620H错误,使用MOV指令向段寄存器传递数据时,不能使用立即数(8)LEA BX,AX错误,L EA指令的源操作数必须为内存单元(9)DEC AL,AH错误,DEC指令为单操作数指令(10)SHR BL,3错误,当移位次数大于1时,在移位指令中特定使用CL寄存器给出移位次数正确的写法:MOV CL, 3SHR BL, CL3.试说明分别执行下列各组指令后,CF、OF、AF、ZF、SF、PF这六个状态标志分别是怎样的取值。
汇编语言、微机原理及接口技术(第3版)郑初华_课后题解答
第1章进制及码元1.进制转换129= 81H= 10000001B=201Q298= 12AH= 100101010B=452Q1000= 3E8H= 1111101000B= 1750Q5DH= 1011101 B= 135 Q= 93 D3E8H= 1111101000 B= 1750Q= 1000 D;357Q=11101111 B= 0EF H= 239 D3.数据表示范围:一字节的无符号数表示范围为0~255,有符号数(补码)表示范围为-l28—+127。
一个字的无符号数表示范围为0~65535,有符号数(补码)表示范围为—32768~+32767。
N位二进制数的无符号数表示范围为0~(2N-1),有符号数(补码)表示范围为-2N-1~(2N-1-1).4.35H代表的ASCII字符为'5',代表十六进制数时等价的十进制值为53 ,代表压缩8421BCD码等价的十进制值为35 ,代表非压缩8421BCD码等价的十进制值为5。
5.FFH代表无符号数时等价的十进制值为255 ,代表补码有符号数时等价的十进制值为一1 ,代表反码有符号数时等价的十进制值为一0 ,代表原码有符号数时等价的十进制值为一l27。
6.--20的8位二进制补码为ECH ,原码为94H ,反码为EBH 。
158的16位二进制补码为009EH,原码为009EH ,反码为009EH 。
第2章微机硬件基础1.计算机系统硬件的五大功能部件及其主要功能?答:硬件系统按功能模块分为运算器、控制器、存储器、输入设备、输出设备。
运算器主要完成算术运算、逻辑运算及移位运算,其中主要包括算术逻辑运算单元Arithmetic Logic Unit,ALU)和暂存数据(原始、中间、结果)的寄存器(Register,R)。
控制器实现对计算机部件的协调调度完成指令的分析执行,其中主要有程序计数器Program Counter,PC)或叫指令指针(Instruction Pointer,IP)、指令寄存器(Instruction register,IR)、指令译码器(Instruction Decoder,ID)、微操作命令发生器、时序发生器等。
汇编语言的基本语法
再例如,对如下的定义,
W1 DW 1, 2, 3, 4, 5, 6, 7 B1 DB 10, 20, 30, 40, 50
N1 EQU B1-W1
N2 EQU $-W1
B2 DB 0 则N1=14,它是从W1开始到B1前为止的一组变量的字节
数; N2=19,它是从W1开始到B2($代表的地址)前为止的一组
PROC NEAR(或FAR) ____________
____________
. . . ____________ RET ENDP
(6) 偏移地址计数器$
汇编程序在对源程序进行汇编的过程中,用偏移地址计数 器$来保存当前正在汇编的指令的偏移地址或伪指令语句 中变量的偏移地址。
用户可将$用于自己编写的源程序中。
例: A DB 20H,30H ; 注释
指令语句是可执行语句,其格式为:
[名字:]指令操作助记符[操作数表达式1[,操作数表达式2]][;注释]
其中,指令操作助记符(指令名)是指令语句中不可缺少的 主体,其余部分(方括号中的内容)有时可省略。
名字只能是标号。 注释以分号开头,分号右边的内容将被汇编程序忽略。 例 L: ADD AX,BX ;注释
汇编后:
第一个$+4:$+4=(A+4)+4=(0074H+4)+4=007CH 第二个$+4:$+4=(A+10)+4=(0074H+0AH)+4=0082H
在指令中,$无论出现在指令的任何位置,都代表本条指 令第一个字节的偏移地址。例如,“JZ $+6”的转向地址 是该指令的首地址加上6,$+6还必须是另一条指令的首地 址。再如,在下述指令序列中,
汇编语言第5章王爽版(子程序调用指令)
例5-1:分别用三种参数传递方法编写求1+2的和的程序。要求将结果送到内存单元,并显示。
DATA SEGMENT SUM DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL, 1 MOV BL, 2 CALL subprog mov ah,4cH int 21h CODE ENDS END START
5.2 子程序的定义、调用和返回(续)
子程序返回指令(RET)
RET [n] 功能:弹出CALL指令压入堆栈的返回地址 段内返回——偏移地址IP出栈 IP←SS:[SP], SP+2 段间返回——偏移地址IP和段地址CS出栈 IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2
子程序的概念
子程序的现场保护与参数传递**
子程序的嵌套与递归调用
子程序的定义、调用和返回 **
子程序设计 *
宏汇编程序设计
教学基本内容
第5章 结构化程序设计
子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 过程(子程序):是指功能相对独立的一段程序。 主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称为子程序。
Spr PROC PUSH BP MOV BP, SP MOV AX, [BP+6] MOV BX, [BP+4] ADD AL, BL OR AL, 30H MOV DL,AL MOV AH,2 INT 21H MOV SUM, AL POP BP RET Spr ENDP
微型计算机原理-第5章(4)微机原理与接口技术(第三版)(王忠民)
3. 字符串输入(10#功能)
功能: 键盘输入一串字符存至存储区
存储区起始单元地址(段地址:偏移量) (DS:DX)
存
储区特点:
第一字节存放存储区的长度(1 255);
第二字节存放输入字符串的实际长度;
第三字节以后为用户输入内容(含结束标识回车的ASCII 码0DH)
第5章 汇编语言程序设计
[例] 从键盘输入一串字符,其个数小于50。
MOV AH,01H INT 21H
第5章 汇编语言程序设计 INT 21H 常用功能介绍
2. 单字符输出(2# 功能)
功能:在屏幕上显示任意单个字符
待输出字符的ASCII码 DL
MOV DL,‘A’
;待输出的字符
MOV AH,2
INT 21H
第5章 汇编语言程序设计 INT 21H 常用功能介绍
DATA SEGMENT
BUF DB 50
DB ? DB 50 DUP(?) BUF
50
DATA ENDS
CODE SEGMENT
…
MOV AX,DATA
MOV DS,AX
…
LEA
DX,BUF
MOV AH, 10
INT
21H
…
CODE ENDS
预留字节 数实际字节 数
用 户 输 入 内 容
第5章 汇编语言程序设计
第5章 汇编语言程序设计
如果对分别存放在寄存器或存储单元中的两个压缩型的 BCD 码进行加法运算,则宏定义如下:
DECADD
MACRO MOV ADD DAA MOV ENDM
OPR1,OPR2 AL,OPR1 AL,OPR2
OPR1,AL
这是一个带有两个形式参数的宏定义。其定义的宏指令语句 就是宏指令名 DECADD。
第五六章 汇编语言程序
数的表示
整数
默认为十进制,非默认基数的用字母后缀标明
B:二进制 Binary H:十六进制 Hexadecimal D:十进制 Decimal O或Q:八进制 Octal
• 示例:1011B,35D,6AH,17Q
以字母开头的十六进制数必须加0
• 示例:FEH→0FEH
《微机接口技术》
23
4. 指定段内的偏移地址
ORG说明符
格式:ORG 常数表达式 作用:指定当前可用的存储单元的偏移地址为 常数表达式的值
EVEN说明符
格式:EVEN
作用:将当前可用的存储单元的偏移地址调整 为最近的偶数值
《微机接口技术》
24
示例
ORG 1000H A DB 47H, 12H, 45H EVEN B DB 47H 说明: ① ORG指令将A的偏移地址部分指定为1000H ② 从A开始存放3个字节变量,占用地址1000H、 1001H和1002H ③ EVEN指令会将B的偏移地址部分从1003H调整为 偶数地址1004H
; 返回DOS
; 代码段结束 ; 模块结束
《微机接口技术》 11
汇编语言程序的组成
分段结构
DATA SEGMENT 按段进行组织,最多由4个 … ; 数据段语句 段组成(代码、数据、附加、 DATA ENDS
堆栈) STACK SEGMENT 每个段以“段名 SEGMENT” … ; 堆栈段语句 开始,以“段名 END”结束 STACK ENDS
《微机接口技术》 25
5. 过程定义
PROC说明符
格式:过程名 PROC 类型属性名 说明:从“过程名”代表的地址开始定义一个 过程;“类型属性名”可选择NEAR(近过程) 或FAR(远过程),默认为NEAR
MSP430学习PPT课件第5章MSP430汇编语言
01100h 0xxxxh 0xxxxh
RESET (NON)MASKABLE TBCCR0 CCIFG
0FFE3h 0FFE2h 0FFE1h 0FFE0h
0xxxxh 0xxxxh
P2IFG0~P2IFG7
;*******************************************************************
01100h
代码段起始地址定义 ORG 01100h
code
009FFh 00200h 001FFh 00000h
RAM 堆栈和变量
Peripherals
stack 堆栈指针初始化
MOV #0A00h,SP
MSP430F149中断向量表
0FFFFh 0FFFEh 0FFFDh 0FFFCh 0FFFBh 0FFFAh
TBCCR0 CCIFG
01100h
009FFh 00200h 001FFh 00000h
RAM 堆栈和变量
Peripherals
0FFE3h 0FFE2h 0FFE1h 0FFE0h
0xxxxh 0xxxxh
P2IFG0~P2IFG7
0FFFFh 0FFE0h
中断向量表
0FFDFh
code memory (FLASH) 程序
clr R5
; Clear pointer
bis #ENC,&ADC12CTL0
; Enable conversions
bis #ADC12SC,&ADC12CTL0 ; Start conversions
bis #CPUOFF+GIE,SR
; Hold in LPM0, Enable interrupts
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
段定义的一般格式如下: 段名 … … 段名 例5.1 例5.2 ENDS [对齐类型 对齐类型] [组合类型 [类别 组合类型] 类别] SEGMENT [对齐类型] [组合类型] [类别] ;段内的具体内容
5.1.2段寄存器的说明语句 5.1.2段寄存器的说明语句
在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一 种对应关系。 建立这种对应关系的说明语句格式如下: ASSUME 段寄存器名:段名[, 段寄存器名:段名, ……]
上面的语句说明了:CS对应于代码段CODE1,DS对应于数据段DATA1。 上面的语句说明了:CS对应于代码段CODE1,DS对应于数据段DATA1。 对应于代码段CODE1 对应于数据段DATA1
在ASSUME语句中,还可以用关键字NOTHING来说明某个段寄存器不与任何段 相对应。下面语句说明了段寄存器ES不与某段相对应。 段的第一条语句就是用ASSUME语句来说明段寄存器与 段之间的对应关系。在代码段的其它位置,还可以用另一个ASSUME语句来改 变前面ASSUME语句所说明的对应关系。这样,代码段中的指令就用最近的 ASSUME语句所建立的对应关系来确定指令中的有关信息。 例5.3
;给堆栈段的栈顶寄存器SP赋初值 给堆栈段的栈顶寄存器SP赋初值 SP ;恢复响应可屏蔽中断
方法2: STACK1 SEGMENT STACK ;定义一个堆栈段,其段名为STACK1 DB 256 DUP(?) STACK1 ENDS
上述段定义说明了该段是堆栈段,系统会自动把段寄存器SS和栈顶寄存器SP与该堆 上述段定义说明了该段是堆栈段,系统会自动把段寄存器SS和栈顶寄存器SP与该堆 SS和栈顶寄存器SP 栈段之间建立相应的关系,并设置其初值,而不用在代码段对它们进行赋值。 栈段之间建立相应的关系,并设置其初值,而不用在代码段对它们进行赋值。
5.3.1顺序程序设计举例 5.3.1顺序程序设计举例
例5.6:试编写一程序计算以下表达式的值。w=(v-(x*y+z-540)) 5.6:试编写一程序计算以下表达式的值。w= 。w (x* 540)) /x式中x、y、z、v均为有符号字数据。 /x式中x、y、z、v均为有符号字数据。 式中 例5.7:已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列 5.7:已知某班学生的英语成绩按学号( 开始) 在TAB表中,假定要查询的学生的学号放在变量NO中,请将查得的结果放在 TAB表中,假定要查询的学生的学号放在变量NO中 表中 NO 变量ENGLISH中。试编写程序。 变量ENGLISH中 试编写程序。 ENGLISH 例5.8:假设有二个字变量word1和word2,编写程序段实现交换其值的功能。 5.8:假设有二个字变量word1和word2,编写程序段实现交换其值的功能。 word1 例5.9:试编写一个程序,把压缩存放的BCD码,转换为其对应十进制数字 5.9:试编写一个程序,把压缩存放的BCD码 BCD 的ASCII码。 ASCII码
COMMON
表示当前段与其它模块中同名段重叠,也就是说,它们的起始地址相同。 最终段的长度是同名段的最大长度。由于段覆盖,所以,前一同名段中的 初始化数据被后续段的初始数据覆盖掉。 组合类型STACK表示当前段是堆栈栈,其组合情况与PUBLIC相同。
STACK AT 数值表达式 该数值表达式是当前段所指定的绝对起始地址的段地址。
5.3顺序程序设计 5.3顺序程序设计
顺序程序设计是完全按照指令的书写顺序而执行每一条指令,它没有分支、 循环和转移。是指令中最简单,最常见的程序结构,它的特点是结构简单, 易于理解,但只适合于处理简单问题的场合。 实际应用中,完全采用顺序结构的程序并不多。 顺序结构程序流程图如下:
S1 S2 S3
其中:段寄存器是CS、DS、ES、SS,段名是在段定义语句说明时的段名。 其中:段寄存器是CS、DS、ES、SS,段名是在段定义语句说明时的段名。 CS
在一条ASSUME语句中可建立多组段寄存器与段之间的关系,每种对应关系 要用逗号分隔。 例如, 例如,ASSUME CS:CODE1, DS:DATA1
5.1.4段的基本属性 5.1.4段的基本属性
本节对段定义中另外的一些属性 “对齐类型”、“组合类型”和“类别”作以说 明,这些可选项可根据需要选择书写。 如果源程序中不指定某个属性,那么,汇编程序将使用该属性的缺省值。 程序中段名可以是唯一的,也可以与其他段同名。若同一模块中,如果两 个段同名,则认为后段是前段的后续,其实属于同一段。 同一模块的两个同名段,后者的可选项属性要不与前者相同,要么属性省 略而选用前者的段属性。 例5.4 1.对齐类型(ALIGN) 1.对齐类型(ALIGN) 对齐类型 对齐类型表示当前段对起始地址的要求,连接程序(LINK.EXE)按表5.1的 地址格式来定位段的起始地址。 在进行段定位时,会根据其定位类型进行定位的,所以,各段之间就有可 能出现一些空闲字节,即可能浪费几个字节单元。
⑥详细表示
在处理符号或数据符号中画一横线,表明该符号在同一文件集中的其它地言有更为详 细的表示。横线在符号内靠近项端,详细表示的标识符写在符号内横线之上。端点符 用作详细表示的开始符号和结束符号,在此符号中应给出加横线符号中的标识符。 ⑦流线 •标准流向与箭头的使用 •流线的交叉 •流线的汇集 •符号流线进出 •连接符 ⑧多出口判断的两种表示方法 •直接从判断符号引出多条流线 •从判断符号引出一条流线,再从它引出多条流线
3.类别(CLASS) 3.类别(CLASS) 类别 类别是一个由程序员指定的用单引号括起来的字符串。 如果一个段没有给出类别,那么,这个段的类别就为空。 类别是用于段的分类,连接程序利用该类别来调整同名、同类别的段,并 使它们相邻。 典型的类别是"Data"和"Code"。如果指定某段的类别是"Code",那么,该 "Data"和"Code" "Data" 段最好是代码段,这样,有的调试程序(如:CodeView)就可以顺序工作。 例如: DATA1 例如: SEGMENT WORD PUBLIC "Data" … DATA1 ENDS
段对齐类型与段起始地址之间的对应关系
对齐类型 BYTE WORD DWORD PARA PAGE
起始地址(二进制)
功能说明
最多的空闲字节数 0 1 3 15 127
xxxx xxxx xxxx xxxx xxxx 下一个字节地址 xxxx xxxx xxxx xxxx xxx0 下一个字地址
xxxx xxxx xxxx xxxx xx00 下一个双字地址 xxxx xxxx xxxx xxxx 0000 xxxx xxxx xxxx 0000 0000 下一个节地址 下一个页地址
5.1.3堆栈段的说明 5.1.3堆栈段的说明
堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。一个完整 的源程序一般最好定义堆栈段。 如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动 为其指定一个64K字节的堆栈段。 在源程序中,可用以下方法来定义堆栈段。
方法1 方法1: STACK1 SEGMENT DB 256 DUP(?) TOP LABEL WORD STACK1 ENDS
5.2.3流程图画法规定 5.2.3流程图画法规定
程序流程图是程序分析中最基本、最重要的分析技术,它是进行流程程序 分析过程中最基本的工具。是由特定的几何图形、指向线、文字说明来表 示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。 1.符号用法 1.符号用法
2.使用约定 2.使用约定 ①图的布局
微机系统的内存是分段管理的,汇编语言源程序也分若干个段来构成。 8086CPU有四个段寄存器,在通常情况下,一个段的长度不能超过64K 64K。 64K 段的长度是指该段所占的字节数: 如果段是数据段,则其长度是其所有变量所占字节数的总和; 如果段是代码段,则其长度是其所有指令所占字节数的总和。 在定义段时,每个段都有一个段名。在取段名时,要取一个具有一定含义 的段名。
流程图中所用的符号应该均心地分布,连线保持合理的长度,并尽量少使用长线。 ②符号的形状 流程图中多数符号内的空白供标注说明性文字。使用各种符号应注意符号的外形和各 符号大小的统一,避免使符号变形或各符号大小比例不一。 ③符号内的说明文字 应使符号内的说明文字尽可能简明。通常按从左向右和从上向下方式书写,并与流向 无关。如果说明文字较多,符号内写不完,可使用注解符。若注解符干扰或影响到图 形的流程,应将正文写在另外一页上,并注明引用符号。 ④符号标识符 为符号规定标识符是为了便于其它文件引用该符号。便如,程序清单中引用到流程图 中的特定符号。符号标识符一般写在符号的左上角。 ⑤符号描述符 为便于进一步理解符号的功能,可标注符号描述符。通常描述符写在符号的右上角。
上述段定义说明了该段的起始地址是下一个字地址、组合类型为PUBLIC、 上述段定义说明了该段的起始地址是下一个字地址、组合类型为PUBLIC、段 PUBLIC 类别是"Data"。 类别是"Data"。 "Data"
4.段组(GROUP) 4.段组(GROUP) 段组 段组伪指令GROUP是用于把源程序模块中若干个段结合成一个组,并对该段 组定义一个段组名。 段组伪指令的格式如下: 段组名 GROUP 段名[, 段名, ……]
2.组合类型(COMBINE) 2.组合类型(COMBINE) 组合类型 组合类型是告诉连接程序如何把不同模块中段名相同的段合并在一起。 具体的组合类型如下:
表示当前段在逻辑上独立于其它模块,并有其自己的基地址。NONE是缺省 的组合类型。
NONE
PUBLIC
表示当前段与其它模块中同段名的PUBLIC类型段组合成一个段。组合的先 后次序取决于LINK程序中目标模块排列的次序。在组合时,后续段的起始 地址要按其对齐类型进行定位,所以,同名段之间可能有间隔。