第5章 汇编语言程序设计2
第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)也不对,因为没有指出存储器的数据类型,即操作数类型不明确。
第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),完成显示、
汇编语言程序设计(第二版) 钱晓捷 课后答案
汇编语言程序设计(第二版)钱晓捷习题答案第二章(01)2.1(1)AX=1200h(2)AX=0100h(3)AX=4C2Ah(4)AX=3412h(5)AX=4C2Ah(6)AX=7856h(7)AX=65B7h2.2(1) 两操作数类型不匹配(2) IP指令指针禁止用户访问(3) 立即数不允许传给段寄存器(4) 段寄存器之间不允许传送(5) 两操作数类型不匹配(6) 目的操作数应为[ BP ](7) 源操作数应为[BX+DI](8) 立即数不能作目的操作数2.3lea bx,table ;获取table的首地址,BX=200Hmov al,8 ;传送欲转换的数字,AL=8xlat ;转换为格雷码,AL=12H2.4mov ax,8057hpush axmov ax,0f79hpush axpop bx ;bx=0f79hpop [bx] ;DS:[0f79h]=8057h2.6AL=89h CF ZF SF OF PFAL=12h 1 0 0 1 1AL=0afh 0 0 1 0 1AL=0afh 1 0 1 0 1AL=00h 0 1 0 0 1AL=0ffh 0 0 1 0 1AL=00h 0 1 0 0 12.5堆栈是一种按“先进后出”原则存取数据的存储区域。
堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。
2.7W=X+Y+24-Z2.8(1)ADD DX,BX(2)ADD AL,[BX+SI](3)ADD [BX+0B2H],CX(4)ADD WORD PTR [0520H],3412H(5)ADD AL,0A0H2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,Dmov ax,X ;ax=Aimul Y ;dx,ax = A*B (将操作数看作符号数,以下同)mov cx,axmov bx,dx ;bx,ax <-- dx,ax =A*Bmov ax,Z ;ax = Ccwd ;dx,ax =C (扩展符号后为双字)add cx,axadc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+Csub cx,540sbb bx,0 ;bx,cx<-- A*B+C-540mov ax, V ;ax= Dcwd ;dx,ax= D (扩展符号后为双字)sub ax, cxsbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540)idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数2.10;(1)xchg的操作数不能是立即数(2不能对CS直接赋值(3)两个操作数不能都是存储单元(4)堆栈的操作数不能是字节量(5)adc的操作数不能是段寄存器(6)没有确定是字节还是字操作(7)in不支持超过FFH的直接寻址(8)out只能以AL/AX为源操作数第二章(02)2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。
第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)机器语言和汇编语言由计算机硬件系统可以识别的指令组成的语言称为机器语言。
汇编语言是将机器指令映射为一些可以被人读懂的助记符。
由于计算机只能识别机器语言,所以汇编语言通常需要通过汇编程序翻译为机器语言。
汇编语言的翻译软件称为汇编程序,它可以将程序员写的助记符直接转换为机器指令,然后由计算机去识别和执行。
用机器语言编写的程序是计算机可以直接执行的程序。
用机器语言编写的程序,代码长度短,执行效率高。
但是,这种语言的缺点也很明显。
最主要的是编写机器语言程序必须要熟知CPU 的指令代码,编写程序既不方便,又容易出错,调试查错也非常困难。
而且编写的程序只能在特定的机器上运行,没有通用性。
(2)高级语言高级语言源程序翻译为指令代码有两种做法:编译或者解释。
编译通过编译程序来完成。
解释则是通过解释程序完成。
解释的结果产生可以直接执行的指令。
编译的结果是得到目标程序。
目标程序也是要经过连接才会得到可执行程序目前应用比较广泛的几种高级语言由FORTRAN/BASIC/PASCAL/C等。
(3)面向对象的语言(4)未来的语言2、语言处理程序语言处理程序是把源程序翻译成机器语言的程序,可分为三种:汇编程序、编译程序和解释程序。
(1)汇编程序把汇编语言源程序翻译成机器语言程序的程序称为汇编程序,翻译的过程称为汇编。
汇编程序在翻译源程序时,总是对源程序从头到尾一个符号一个符号地进行阅读分析,一般用两遍扫描完成对源程序的加工转换工作。
汇编语言在翻译的同时,还对各种形式的错误进行检查和分析,并反馈给用户,以便修改。
反汇编程序也是一种语言处理程序,它的功能与汇编程序相反,它能把机器语言程序转换成汇编语言程序。
(2)编译程序编译程序是把高级语言源程序(如Fortran、Pascal、C 等)翻译成目标程序(机器语言程序)的一种程序,翻译的过程称为编译。
(3)解释程序解释程序也是一种对高级语言源程序进行翻译处理及的程序。
第五章_汇编语言程序设计基础
§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除外)还要由数据传送令在 执行程序时赋值。
汇编语言程序设计
标号有三种属性:
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。
第5章 习题及答案
第五章 汇编语言程序设计1、画图说明下列语句所分配的存储器空间及初始化的数据值。
难度:2(1) BYTE_VAR DB ‘BYTE’,12,-12H ,3 DUP(0,2 DUP(1,2),7) (2) WORD_VAR DW 3 DUP(0,1,2),7,-5,’BY’,’TE’,256H 答:(1) (2)07H BYTE_V AR 42H WORD_V AR 00H 00H 59H 00H FBH 54H 01H FFH 45H 00H 59H 0CH 02H 42H EEH 00H 45H 00H 00H 54H 01H 00H 56H 02H 01H 02H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H07H00H2、假设程序中的数据定义如下: PARTNO DW ?PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $- PARTNO 问:PLENTH 的值为多少?他表示什么意义? 答:PLENTH 的值为22,它表示当前已分配单元空间。
《微型计算机原理》第5章习题与解答3、有符号定义语句如下:难度:2BUF DB 1,2,3,’123’EBUF DB 0L EQU EBUF-BUF问:L的值是多少?答:L的值为6;4、假设成序中的数据定义如下:难度:2LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE_LIST DB 1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址存入BX。
(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3)写一条伪指令定义符使CODE_LENGTH的值等于 CODE_LIST域的实际长度。
汇编语言课件第05章
11/37
第五章 汇编语言顺序程序设计
乘法指令只影响CF和 , 乘法指令只影响 和OF,其它条件码无定义 。 1)MUL: 若乘积的高一半为 ,则CF=OF=0, ) : 若乘积的高一半为0 , 否则, 否则,CF=OF=1。 。 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 则,CF=OF=0,否则,CF=OF=1。 ,否则, 。
13/37
第五章 汇编语言顺序程序设计
一、算术指令(5类) 算术指令( 类 1. 加法指令(ADD,ADC,INC) 加法指令( , , ) 2. 减法指令(SUB,SBB,DEC,NEG ,CMP ) 减法指令( , , , 3.乘法指令 MUL,IMUL) 3.乘法指令(MUL,IMUL) 乘法指令( 4.除法指令(DIV,IDIV) 除法指令( 除法指令 , ) 5.十进制调整指令(DAA,DAS等) 十进制调整指令( 十进制调整指令 , 等
12/37
第五章 汇编语言顺序程序设计
如何区分MUL和IMUL 和 如何区分 (1111,1111B)×(1111,1111B) , ) , ) 看作无数号数,上式为: 看作无数号数,上式为:FFH×FFH=FFE01H × 看作带符号数,上式为:(-1) 看作带符号数,上式为:( )×(-1)=1 :( ) 选用MUL或IMUL应根据实际情况而定。 或 应根据实际情况而定。 选用 应根据实际情况而定
21/37
第五章 汇编语言顺序程序设计
本章内容分三节: 本章内容分三节: 5.1 算术指令 5.2 逻辑指令 5.3 顺序程序举例
22/37
第五章 汇编语言顺序程序设计
二、逻辑指令 逻辑运算指令( 1. 逻辑运算指令(5个) 移位指令( 2. 移位指令(8个)
第5章 MASM汇编语言程序设计
顺序、分支和循环三种结构
汇编语言程序设计一般可以分为以下基本步骤: (1)分析问题 (2)算法设计 (3)画流程图 (4)编写源程序 (5)上机调试运行
la1:lea dx,m2 la2:mov ah,9 int 21h mov ah,4ch int 21h cod1 ends end stt
例2:在数据段的一个字符串中查找字符“$”,如 找到,则将其所在单元的偏移地址存入字单元 变量ADDR中,否则将零存入ADDR中。
dat1 segment str1 db ‘CFDP$RSVQE’ addr dw ?
2) 转移表法 例:根据字节变量 n中给定的序号(0~7),通过转移表实现 向8个处理程序(入口地址为L0~L7)中的一个程序转移。
data segment n db 7 data ends code segment assume cs:code,ds:data stt: mov ax,data mov ds,ax mov ah,0 mov al,n mov dx,ax add ax,ax add ax,dx L4: … mov bx,offset jp1 L5: … add bx,ax L6: … jmp bx L7: … jp1: jmp near ptr L0 mov ah,4cH jmp near ptr L1 int 21h jmp near ptr L2 code ends jmp near ptr L3 end stt jmp near ptr L4 jmp near ptr L5 jmp near ptr L6 jmp near ptr L7 L0: … 表地址=转移表首地址+n*3 L1: … L2: … L3: …
STM8S系列单片机原理与应用(潘永雄)第1-5章章 (5)
iret ; 中断入口地址表
segment 'vectit' dc.l {$82000000+main} 入口地址表
; reset [注9]中断
第5章 汇编语言程序设计
dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt}
ram0_end.b EQU $ram0_segment_end
ldw X,#ram0_start
clear_ram0.l
clr (X)
incw X
cpw X,#ram0_end
第5章 汇编语言程序设计
jrule clear_ram0
#endif
#ifdef RAM1
; [注6] RAM存储区0100H
在STM8S中,复位后将从复位中断逻辑指示的地址单 元(可以是ROM、EEPROM,甚至是RAM)取出并执行第一 条指令。第一条指令在ROM存储区中的存放位置并没有限 制,将第一条指令所在存储单元的地址填入复位中断入口 地址表中。
微型计算机原理-第5章(2)微机原理与接口技术(第三版)(王忠民)
DS、
INT
ES
数2…0据H
PSP(256 字节)
附段加
CSS:SPSIP定义了代 堆段段段堆码栈栈段的用程用序户
户程序装入情况
第5章 汇编语言程序设计
DSEG SEGMENT STRING1 DB 1,2,3,4,5
DSEG ENDS ESEG SEGMENT
STRING2 DB 5 DUP(?) ESEG ENDS SSEG SEGMENT
CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备
上机过程
第5章 汇编语言程序设计
编辑程序 编辑
汇编程序 汇编
连接程序 连接
手写程序
EDIT .ASM文件
MASM .OBJ文件
LINK .EXE文件
有语法错误 无法正常连接 有算法错误
第5章 汇编语言程序设计
用户程序的装入
完成以下操作: 确定内存可用部分 以便存放要执行的 .exe 文
INC
BX
ADD AL,[BX]
MOV SUM,AL
RET
ENDP CODE END
MAIN
ENDS START
第5章 汇编语言程序设计 第二讲结束
每一种知识都需要努力, 都需要付出,感谢支持!
知识就是力量,感谢支持!
一一一一谢谢大家!!
STACK‘STACK’ DW 10 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME ES:ESEG,SS:SSEG
START: MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX
LEA SI, STRING1
第5章80C51单片机汇编语言程序设计
08.08.2021
最新课件
23
第5章 汇编语言程序设计简介 5.2 汇编语言基本结构
08.08.2021
最新课件
24
5.2.1 顺序程序设计
例 1 两个无符号双字节数相加。 设被加数存放于内部RAM的40H(高位字节), 41H(低位字节), 加数存放于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。
14
(2)等值指令EQU
指令格式: 字符名称 EQU
例: PA8155 EQU 8001H ;即给标号PA8155赋值为8001H
使指令中的字符名称等价于给定的数字或汇编符号。
如果在程序中要多次使用到某一地址,由EQU指令将 其赋值给一个字符名称, 一旦需要对其进行变动, 只要改 变EQU命令后面的数字即可。 注意:由 EQU等值的字符名称必须先赋值后使用, 且在 同一个源程序中, 同一个标号只能赋值一次。
是一个标号, 其地址与前一条伪指令连续 , 即1003H,
1004H地址单元中依次存放 45H, 66H。
08.08.2021
最新课件
17
(4)定义字指令DW
指令格式:
[标号:] DW 16
该指令的功能与DB相似, 区别仅在于从指定地址开 始存放的是指令中的 16 位数据, 而不是字节串。每个 16 位数据要占两个存储单元, 高8 位先存, 低 8 位后存, 这和 MCS -51指令中的16位数据存放顺序是一致的。
单片机推出时,都有相配套的C编译器加以支持。 高级语言编写程序的缺点是实时性不高,结构不 紧凑,编译后占用存储空间比较大,这一点在存 储器有限的单片机应用系统中没有优势。
08.08.2021
最新课件
微机原理与接口技术(习题答案)
源操作数:直接寻址;目的操作数:寄存器寻址
⑸ MOV [BX+SI+8], BX
源操作数:寄存器寻址;目的操作数:基址加变址寻址
2.若AX=0ABCDH,BX=7F8FH,CF=1。求分别执行8086 CPU指令
⑴ ADDAX,BX⑵ ADCAX,BX
⑶ SBBAX,BX⑷ NEGAX
⑶ JUM 2200H⑷ LESDI,[2100H]
⑸ MOV [BX+SI+8], BX
解答
⑴ MOV BX, WORD PTR[2200H]
源操作数:直接寻址;目的操作数:寄存器寻址
⑵ AAA
源操作数:寄存器寻址AL(也称隐含寻址);目的操作数:寄存器寻址
⑶ JUM 2200H
程序转移段内直接寻址方式
⑸ AND AX,BX⑹ ORAX,BX
⑺ XORAX, BX⑻ IMUL BL
后,AX寄存器中的内容,并指出标志寄存器SF,ZF,AF,PF,CF及OF的状态。
解答
⑴ AX=2B5CH,SZAPCO=001110B
⑵ AX=2B5DH,SZAPCO=001010B
⑶ AX=2C3DH,SZAPCO=001001B
⑷ AX=5433H,SZAPCO=001110B
⑸ AX=2B8DH,SZAPCO=00X100B
⑹ AX=FFCFH,SZAPCO=10X100B
⑺ AX=D222H,SZAPCO=10X100B
⑻ AX=3283H,SZAPCO=XXXX11B
3.若AL=78H,BL=87H,
⑴求执行指令
ADD AL,BL
Jmp exit
P1: cmp NUMBER, Y
汇编语言源程序的框架结构(2)_OK
;AL←X
CL,2
8
AL,CL
;AL←X×4
PROC1 ENDP
CODE ENDS
§5.3 分支结构程序设计
分支程序结构可以有两种形式,如图5.4所示,它们分 别相当于高级语言程序中的IF-THEN-ELSE语句和CASE语 句,它们适用于要根据不同条件做不同处理的情况。
判定条件
判定条件
语句1
语句2 语句1 … 语句2 … 语句n
AH,9
INT
21H
23
EXIT1:
MOV AH,4CH
;返回DOS
§5.4 循环结构程序设计
§5.4.1 循环程序的组成 1.设置循环的初始状态 如置循环次数的计数值,以及为循环体正常工作的初始状态等; 2.循环体
这是循环的工作主体,它由循环的工作部分及修改部分组成。3. 循环控制部分
它是循环程序设计的关键,每一个循环程序必须选择一个循环 控制条件来控制循环的运行和结束,通常有两种方法控制循环:用 计数控制循环,用条件控制循环
29
;返回DOS
2.用条件控制循环
例5.8:将正整数NUM插入到一个从小到大排列好顺序的正整数 字节数组序列中。
分析:假设该数组的首地址和末地址分别为ARRAY_HEAD、A
RRAY_END,显然在这里需要插入的是一个数,所以不一定要
扫描整个数组。同时为了插入这个数据,必须要空出位置,即
凡是比它大的数据都应该向地址增大的方向移动一个字节,故
;进行合法判断
;取地址表首址
15
;段内转移乘以2,段间转
A0: LEA DX,S0
;各分支程序段
MOV
AH,9
INT
21H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
; 取升序表首地址
; 9号功能调用 号功能调用
MOV AL, 4CH INT 21H MAIN ENDP CODE ENDS END MAIN (MASM汇编演示 汇编演示) 汇编演示 ; 返回操作系统
例3:大小写字母转换程序(综合)
1. 键盘输入大小写混合字母字符串; 键盘输入大小写混合字母字符串; 大小写混合字母字符串 2. 将大写字母全部转换成小写字母; 将大写字母全部转换成小写字母; 3. 换行显示转换结果。 换行显示转换结果。 显示转换结果 4. 将转换后的小写字母按 将转换后的小写字母按A~Z排序; 排序; 排序 5. 换行显示排序结果; 换行显示排序结果;
从高位 高位到低位数 高位 据依次显示
PUSH CX MOV SHR CL,4 , AL,CL ,
CALL PP MOV AL,BL ,
CALL PP DEC DI
POP CX LOOP LP2 RET PM2 ENDP
; 子程序返回
子程序PP
PP PROC AND CMP JB ADD S0: : ADD MOV MOV INT RET PP ENDP AL,0FH , AL,10 , S0 AL, AL,7 AL,30H , DL,AL , AH,2 , 21H ; 子程序 子程序PP ;取AL低4位 低 位 ;AL–10 → CF/ZF 时转S ; AL<10时转 时转 ;AL ←AL+7 ;AL ←AL+30H ;DL ←AL ;AH ←2,功能号为 ,功能号为2 ;2号系统功能调用 号系统功能调用 ; 子程序返回
设内循环次数CX, 表长度–BX 设内循环次数 ,CX ←表长度
程 序 流 程 图
L1
DL—外循环次数 外循环次数 DH—交换标志 交换标志 BX—冒泡次数 冒泡次数 CX—内循环次数 内循环次数 SI—表指针 表指针
L3
显示字符串
例:对无序字符表按升序排列,显示排序后字符表, 对无序字符表按升序排列,显示排序后字符表, 升序排列 显示完,提示‘ ! 显示完,提示‘OK!’。
字母ASCⅡ 字母ASCⅡ码表
A B C D E F G H I J K L M 41H 42H 43H 44H 45H 46H 47H 48H 49H 4AH 4BH 4CH 4DH N O P Q R S T U V W X T Z 4EH 4FH 50H 51H 52H 53H 54H 55H 56H 57H 58H 59H 60H a b c d e f g h i j k l m 61H 62H 63H 64H 65H 66H 67H 68H 69H 6AH 6BH 6CH 6DH n o p q r s t u v w x y z 6EH 6FH 70H 71H 72H 73H 74H 75H 76H 77H 78H 79H 80H
; 判断进位位 ; CF=1,最高位置 ,最高位置1 ; 显示指针 ; 显示的字节数 ; 调用子程序 调用子程序2 ; 返回操作系统 ; 子过程 (加法) 子过程1(加法)
; 子过程 (显示) 子过程2(显示)
; 子程序 子程序PP
子程序PM1
PM1 LP1: PROC CLC MOV AL, [DI] ADC AL, [SI] MOV [BX], AL INC DI INC SI INC BX LOOP LP1 RET ENDP ; 子过程 子过程1 ; CF清零 清零 ; 取被加数
排序— 排序—冒泡算法原理
08 02 11 01 ① 02 08 11 01 02 08 11 01 02 08 01 11 ① 02 08 01 11 02 01 08 11 02 01 08 11 ① 01 02 08 11 01 02 08 11 01 02 08 11
大数沉底
②
②
②
③
③
③
一次冒泡
将内存缓冲区BUF中 的字符串送屏幕或打 印机输出
例四:统计不及格人数及计算平均成绩 综合 综合) 例四:统计不及格人数及计算平均成绩(综合
某班50人的英语成绩在数据区中: 某班 人的英语成绩在数据区中: 人的英语成绩在数据区中 1. 编程按降序排列全部成绩; 编程按降序排列全部成绩; 2. 统计不及格人数; 统计不及格人数; 3. 计算平均成绩; 计算平均成绩; 4. 换行分别显示结果。 换行分别显示结果。
大写字母转换成小写
XOR CH,CH MOV CL,D1+1 MOV SI,OFFSET D1+2 P2: MOV AL, [SI]
=LEA SI, D1+2
CMP AL, ‘A’ JB P1
CMP AL, ‘Z’ JA P1
ADD BYTE PTR[SI], 20H P1: INC SI LOOP P2
XCHG AL,[SI] AL, MOV MOV L2: : LOOP INC DEC JNZ [SI–1],AL , DH,1 , L1 BX DL L0
;BX ←BX+1 ;外循环次数DL ←DL–1 外循环次数
L3: :
MOV MOV INT
Байду номын сангаас
DX,OFFSET STR , AH,9 , 21H
DATA SEGMENT SCORE DB 67,78,88,99,99,45,32,76,89,95,54,81,64,77,62,83,75 DB 55,78,64,71,59,56,77,88,39,92,95,98,90,66,88,62,46 DB 98,87,98,76,81,85,64,89,80,65,55,67,84,72,96,85,100 C1=$-SCORE-1 NPASS DB ? AV_SC DB ?,? DIS1 DB ‘STUDENTS’’SCORES ARE: $' DIS2 DB ' STUDENTS WHOSE SCORES ARE LESS THAN 60! $' DIS3 DATA ENDS DB 'AVERAGE SCORE: $'
回车换行
MOV DL,0DH MOV AH,2 INT 21H LF FF CR SPACE ! “ # $ 0AH 0CH 0DH 20H 21H 22H 23H 24H
换行 换页 回车 空格
MOV DL,0AH MOV AH,2 INT 21H
字符串显示
BUF DB ‘goodbye $’ ……
二次冒泡
三次冒泡
设外循环次数DL 设外循环次数 设交换标志DH=1,清BX , 设交换标志 DH=0 否 DH ← 0 设表指针SI 设表指针 两元素比较 是 修改指针SI 修改指针 否 <= 两元素交换 L2 DH ←1 CX ←CX–1=0 是 BX ←BX+1 否 DL ←DL–1=0 是 否 是
MOV CX,C1 , SUB LEA CX,BX , SI,STR ,
L1: : 降序如 何实现? 何实现?
MOV INC CMP JBE
AL,[SI] , SI AL,[SI] , L2
;取表中的字符 ;SI ←SI+1 ;将相邻的两个数进行比较 ;AL≤[SI]时,跳转到 ≤ 时 跳转到L2 ;将两数交换,将大数下移 将两数交换, ;将小数上移 ;交换标志符置1 交换标志符置
; 修改指针 ; 修改指针 ; 修改指针 ; 子程序返回
PM1
子程序PM2
PM2 LP2: PROC MOV AL, [DI] MOV BL,AL , ; 子程序 子程序2 ; 取显示数据 ;BL←AL暂存 暂存 ; 保护计数器 ;CL←4 ;AL逻辑右移 位 逻辑右移4位 逻辑右移 位转换/显示 ;高4位转换 显示 位转换 ;AL←BL 位转换/显示 ; 低4位转换 显示 位转换 ;修改地址指针 修改地址指针 ; 恢复计数器
NAME EX4_4 DATA SEGMENT STR DB DB C1=$-STR-1 DB ‘OK! $’ ! DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN PROC ‘AGJXYDEBFIPKWR’ ‘QOUZVCHMST4135’ ;计算无序字符表的长度 ;设置无序字符表
16进制数的ASCⅡ码转化
16进制数 16进制数 0 1 2 3 4 5 6 7 8 9 A B C D E F 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 ASCⅡ ASCⅡ码 +57H a b c d e f g h i j 61 62 63 64 65 66 67 68 69 6A 0D 0A 24 20
CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STAC MAIN PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DATA MOV DS, AX LEA DI, D1 LEA SI, D2 MOV BX, OFFSET SUM MOV CX, B1 CALL PM1 ; DS赋值 赋值 ; 被加数指针 ; 加数指针 ; 结果和指针 ; 循环次数 ; 调用子程序 调用子程序1 ; 用于结束返回 ; 主过程
键盘输入字符串
0AH系统 功能调用 ;定义数据段 定义数据段 DATA SEGMENT
DISP1 DB 'Please input a char string : $' D1 DATA DB 37,?,37 DUP(?) ;存储输入的字符串,最多36个字节 ? ENDS
;接受键盘输入 MOV DX,OFFSET D1 MOV AH,0AH INT 21H ;调用0AH号系统功能来输入字符串 ;输入的字符串放在缓冲区D1
9号系统功能调用
;$为字符串结束标志 $
LEA SI, D1+2 MOV DL,D1+1 XOR DH,DH ADD SI, DX MOV BYTE PTR[SI], ‘$‘ MOV DX,OFFSET D1+2 MOV AH,9 9 INT 21H