微机原理第04章4子程序

合集下载

微机原理chapter4

微机原理chapter4
计算X的平方值在TABLE 表中的地址
取出X的平方值送AL 结 束
开 始

例3 通过键盘 键入一个两位 十进制数,将 该数转换成压 缩的BCD码, 送入BUF中。
通过键盘读入十位数的ASCⅡ码 将十位数的ASCⅡ码转换成BCD码 将十位数的BCD码左移4位 AL 将AL BUF保存
AL AL
通过键盘读入个位数的ASCⅡ码 将个位数的ASCⅡ码转换成BCD码 将十位数和个位数的BCD码合并
④ JLE/JNG ;小于等于/不大于,则转移
例:设某个学生的英语成绩已经存放在AL中,若 低于60分,则打印‘F‘(FAIL);若高于或等于85 分,则打印‘G‘(GOOD),当在60分和84分之间时, 打印‘P‘,用汇编语言程序实现要求的操作。 JMP PRINT CMP AL,60 JB FAIL GOOD:MOV DL,‘G‘ CMP AL,85 PRINT:MOV AH,02H JAE GOOD INT 21H MOV DL,‘P‘ JMP PRINT FAIL:MOV DL,‘F‘
数值返回运算符
1、OFFSET 变量或标号 2、SEG 变量或标号 例: MOV AX,SEG DA1 MOV DS,AX 3、TYPE 变量或标号

修改属性运算符
1、段操作符 例:MOV AX,ES:[BX] 2、PTR 例: MOV BYTE PTR[BX],10H MOV WORD PTR[BX],10H
DATA VAL1 DATA CODE SEGMENT DB 12H , 8EH …… ENDS ;定义数据段 ;定义变量 ;数据段结束
SEGMENT ;定义代码段 ASSUME DS:DATA , CS: CODE START: MOV AX , DATA ;初始化DS MOV DS , AX …… MOV AH , 4CH ;返回DOS INT 21H CODE ENDS ;代码段结束 END START ;源程序结束

微机原理第4章-汇编语言

微机原理第4章-汇编语言

源程序格式 操作数
分析运算符和合成运算符 用以分析提取一个存储器操作数的属性,如段、 分析运算符 用以分析提取一个存储器操作数的属性,如段、 偏移量或类型等。 偏移量或类型等 。 OFFSET、 SEG、 TYPE、 SIZE、 LENGTH; 、 、 、 、 ; 可规定存储器操作数的某个属性,例如类型。 合成运算符 可规定存储器操作数的某个属性,例如类型。 PTR、THIS、 PTR、THIS、SHORT (类似类型强制转换) 类似类型强制转换) INC WORD PTR [BX] ADD BYTE PTR[ 1000H], 38H
标识符( 字母+字母 数字/_,<32个) 标识符(Identifiers字母 字母 数字 字母 字母/数字 个 界符( 分隔两部分) 界符(Delimiters分隔两部分) 空格 :, 分隔两部分 常数( 常数(Const.s) 1000H 11101000B 0ABCDH ) 注释( 注释(Comments) ;分号后 大段语句 .Comment @ / @ ) 分号后 大段语句:
计算机程序设计语言 计算机程序设计语言 程序 机器语言、 机器语言、汇编语言和高级语言 高级语言( 高级语言(High Level Language): 通用,一般不要求了 ) 通用, 解结构原理。易读,易编写,调试, 解结构原理。易读,易编写,调试,简洁 BASIC,….,VC(++)/VB/DELPHI,JAVA,C#,HTML , , ==> 机器语言(执行)---翻译 编译 翻译/编译 机器语言(执行) 翻译
汇编语言(Assembly Language)---面向具体机器(CPU)语言 ,最接近于 面向具体机器( 汇编语言 ) 最接近于
机器语言的低级语言。借助于助记符编程,地址数据可符号化( 机器语言的低级语言。借助于助记符编程,地址数据可符号化(可读性提 ),编写 修改较方便。完整的语法,不易出错。 编写、 高),编写、修改较方便。完整的语法,不易出错。例: ADD AX,100 (05 64 00) JMP 1000:2000 (EA 00 20 00 10)

西安电子科技大学微机原理第4章

西安电子科技大学微机原理第4章

2015/7/23
20
2)变量属性



段地址(SEG 偏移地址(OFFSET 类型(TYPE):变量的类型是所定义的每个变量所占据 的字节数。对于DB、DW、DD、DQ、DT定义的变量其 类型分别为 1、2、4、8、10。 长度(LENGTH):变量定义时,一个变量名所定义的变 量个数。在含有DUP操作符的变量定义中,变量名所定义 的变量个数为定义格式中的重复次数。在其它各种变量定 义中,每个变量名所定义的变量个数均为 1 大小(SIZE):变量定义语句中,分配给同一变量名的所 有变量的总的字节数;大小(SIZE)=变量类型(TYPE) ×变量长度(LENGTH)。
21
2015/7/23
3)举例
DATA1 DB 20H DATA2 DW 0204H, 100H DATA3 DB (-1*3),(15/3 DATA4 DD 12345H DATA5 DB ′0123′ DATA6 DW ′AB′, ′C′, ′D′ DATA7 DB ? DATA8 DD ? DATA9 DB 5 DUP(00 DATA10 DW 3 DUP(?)
2015/7/23
5
4.1 8086汇编语言的语句



指令可由汇编程序翻译成机器语言指令,汇编语 言中的指令与机器语言指令基本上是一一对应的, 由CPU执行的语句,称为指令性语句; 伪指令则不汇编成机器语言指令,仅仅在汇编过 程中告诉汇编程序应如何汇编,称为指示性语句; 宏指令是使用者利用上述基本语句自己定义的新 的指令。
A3 DW VALUE-3 ;定义变量A3为变量VALUE前3个字节 A4 DD VALUE ;高位字为变量VALUE所在段的段地址, 低位字为变量VALUE的偏移地址。

微机原理chapter4

微机原理chapter4

CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备
一 汇编语言上机过程
编辑源程序EDIT ABC.ASM
•D:>EDIT ABC.asm •D:>MASM ABC;
有语法错,回EDIT下改该程序
汇编源程序 MASM ABC.ASM
有汇编错误信息 ? Y N
形成目标程序ABC.OBJ
•D:>LINK ABC;
每段由伪操作SEGMENT开始、由ENDS结束。
start:
CLD MOV
AX , aa
程序最后为END结束语句,后跟一启动地址。 启动地址指示程序开始执行的第一条语句。
MOV DS , AX LEA SI , str1 MOV AX , SEG str2
程序中设有返回DOS的功能。 使程序执行完后返回DOS系统的命令接受状态。
•简化的汇编语言程序框架(适用于masm5.0/6.0版本)

.model small ;定义程序的存储模式(小型模式)

.stack
;定义堆栈段(默认是1KB空间)

.data
;定义数据段

……
;数据定义

.code
;定义代码段
•start: mov ax,data ;程序起始点

mov ds,ax
•完整汇编语言程序框架(适用于所有masm版本)
data1 SEGMENT ;数据段1, (可据需要设定,也可无)
……
;变量定义
data1 ENDS
data2 SEGMENT ;数据段2 (可据需要设定,也可无)
……
data2 ENDS
code SEGMENT ;程序段

微机原理4

微机原理4

第四章汇编语言程序设计
符组成,如3+2、77 AND 55、NOT 5AH等。

1). 操作数
操作数用于代表一个数据或一个地址。

2). 运算符
运算符包括算术、逻辑、关系、分析、综合五类运算符(p136见表
①算术运算符包括 + 、-、*、/ 、MOD
参加运算的内容可以是数据,也可以是地址,但在一个算术运算符的两边不能都是地址。

MOV BX, DATA1 LT 0010H MOV BX, 0
红河学院工学院
汇编语言程序设计4.2.1 概述汇编语言程序设计与其它语言的程序设计一样,都要有良好的数据结构和算法,对每个要解决的问题要经过入下步骤:
逻辑运算指令例1:屏蔽AL寄存器的低四位。

汇编语言程序设计(四子程序)

汇编语言程序设计(四子程序)

;设置移动次数,存放ASCII码地址首地址
mov cl,4 ;设置左移位数 rol ax,cl ;循环左移 push ax ;暂存ax里的数据,DOS功能会改变AL内容 mov dl,al ;转换al的高4位 and dl,0fh ;将dl中的高4位清零 or dl,30h ;dl高4位变成3 cmp dl,39h jbe aldisp1 ; dl内的数小于等于39h转移 add dl,7 ;是0Ah~0Fh,还要加上7 aldisp1:mov ah,2 ;显示,ah=02表示:将dl中的内容以字符的形式输出到屏幕 int 21h ;系统功能调用,至于是那种功能调用,取决于ah里的内容 pop ax ;弹出栈,此时ax的内容为循环左移4位原数 dec bx ;计数器减1 (左移次数) jnz a1 ;结果不为0转移,进行下一个4位转换 mov dl,'H‘ mov ah,2 ;显示字符“H” int 21h pop dx pop cx pop bx pop ax ret ;过程返回 ALdisp endp code ends end start a1:
硬件:计算机 4.实验要求: 软件:DEBUG调试软件。
①能在DEBUG提示符下,编写简单的汇编程序。 ②熟练掌握修改寄存器、存储单元的方法,理解段地址、偏移量的表达方式。
5.实验步骤: ⑴用文件编辑器编写汇编语言程序(如:记事本),并以asm为后缀命名, 如:2.asm ⑵运行masm编译器进入dos,调入所编写的汇编程序,生成2.obj,然后用
Dec
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
Hex
2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F

ZD微机原理Ch04程序设计(第四次课)

ZD微机原理Ch04程序设计(第四次课)

第4章89C51汇编语言程序的设计与调试知识回顾汇编语言实用程序设计
1 查表程序设计:
根据自变量x,在表格中寻找y,使y=f(x)
查表指令:
¾MOVC A,@A+DPTR ;A←((A)+(DPTR))¾MOVC A,@A+PC ;A←((A)+(PC))
2 关键字查找程序设计
从50个字节的无序表中查找一个关键字××H
、图4-5所示的几种形式
和图4-7。

例4-11 求符号函数的值。

SIGNFUC: MOV A, 40H
CJNE A, #00H, NZEAR AJMP NEGT ;x =0,y =0
NZEAR: JB ACC.7, POSI ;x <0,y =-1
MOV A, #01H ;x>0,y =1AJMP NEGT
POSI: MOV A, #81H NEGT: MOV 41H, A RETURN: RET
END
y =
000011=<>⎪⎩

⎨⎧−+x x x
(A)=?
语句组1
语句组1语句组2
语句组2语句组3
语句组3语句组4
语句组40AH
0BH
0CH 入口
AAA
BBB
CCC
DDD
计数循环控制结构条件控制结构
最常见的多重循环是由DJNZ指令构成的软件延时程序,它是常用的程序之一。

延时程序。

89C51指令执行时间有很大的关系。

晶振时,一个机器周期为
指令的时间为2µs。

这时,可用双重循环方法写出下面如下的延时50ms的程序:。

清华大学冯博琴微机原理第4章汇编语言程序设计

清华大学冯博琴微机原理第4章汇编语言程序设计
16
MEMORY: 表示本段在存储器中应定位在所有其他 段的最高地址。
AT<表达式>: 表示本段从表达式指定的地址处开始 装入,这样,在程序中用户就可以直接定义段地 址,这种方式不适用于代码段。
类别:是用单引号括起来的字符串,连接时,LINK 程序把类别相同的段放在连续的存储区中(可以不 同名)。类别名可以任意,但一般为 ‘CODE’ , ’STACK’, ‘DATA’等,表明该段的类型
因为组合类型为PUBLIC,所以共用一个段基址,在 内存中顺序存放。
01010H + 17AH= 0118AH
因为第二个数据段的定位类型为PARA,故应从节 (段)的边界开始,01190H
19
现有汇编目标程序A和B,它们的数据段类别名相
同,组合类型皆为COMMON,若A程序数据段中有
字符串‘ABC’,B程序数据段中有字符‘DEF’,则
00H PSPL
SS
PUSH AX
PSPH
CS
即将DS的内容和0000H压入堆栈,程序
结束时的最后一条语句为RET,就把压
入堆栈的PSP段的段基址和偏移量0000H
弹出并送入CS和IP,转而执行返回DOS
的指令INT 20H。
系统占用
INT 20H 程序段前缀 用户数据区
用户堆栈区 用户代码段
…… RET
系统和 ROM占用 6
返回操作系统的另一个办法是用系统调用中断 指令: INT 21H, 在用户程序结束时,用下 面两条指令:
MOV AH, 4CH INT 21H 这两条指令经常用在短的程序段中,即用户程 序并不是一个完整的汇编程序,而只是由一些 指令组成的、没有堆栈区或数据区的程序段。
7

微机原理4章

微机原理4章
名字 伪指令助记符 操作数,操作数 „ ;注释
9
常量名(符号名)、变量名、段名或过程名,其后不加冒号
标号和名字的 命明规则:
以字母开头 由字母A~Z(不分大小写)、数字(0~9)及部分特 殊字符(? @ $ 和 下划线_等)组成 字符串长度不超过31个 标识符不能是汇编语言中有特定意义的保留字、助记 符、Reg等。
12
2、变量、标号(存储器操作数)



变量:专指存放在存储单元中的数据,数据的值是可变 的。在程序中以变量名形式出现,是数据在内存中存放 地址的符号表示。 标号:某条指令的符号地址。是程序转移指令的操作数。 变量和标号都和存储器地址相关连。 变量和标号都具有三种属性: 段属性 、偏移量属性、类型属性
编 辑 源程序:文件名.asm 汇 编 目标程序:文件名.obj 错误
负责把汇编源程序翻译 成目标程序的一种系统 软件。又称汇编程序。 •不同汇编器的语法和功 能相差很多 • MASM(宏汇编)
MASM4.0 MASM5.0 MASM6.15
错误
链 接 错误 可执行程序:文件名.exe
调 试
2
• TASM •链接:LINK
见例4.19 见例4.21
1、操作数是常数或表达式
X DB 25H
Y DW 4142H Z DD 12345678H Z A DB ? B DW ? X Y 1 25H 4 42H 2 41H 7 78H 16 56H 34H 12H
B_TABLE
W_TABLE
DB 1, 4,-2,7,16
DW 1122H ,3*20H


功能: 变量定义、存储器分配、指示程序开始和 结束、段定义、段分配等。 简单了解4.2.6 、4.2.7、4.2.8内容

jlmao微机原理ch4part4

jlmao微机原理ch4part4
循环的控制结构形式 DO-UNTIL 先执行后判断 DO-WHILE 先判断后执行
初始化
初始化
循环体
根据控制条件转移
根据控制条件转移
Kunming University of Science & Technology
循环体
Page 20
(一) 单重循环
循环:计数循环、条件循环。
1、计数控制的循环:循环指令LOOP等。
MOV AL, X
MOV DL, 6
MUL DL
; AX=AL*DL
ADD AL, 8 ;
MOV DL, X ;
MUL DL
MOV Y, AX
MOV AH, 4CH
INT 21H
CODE ENDS
END START
Kunming University of Science & Technology
Page 8
1、先画流程图,如右。
START
2、先尝试自己编程实现。 初始化
3、自己编好后,上机调试, AL←X
或与附录中的程序清单比较, AL≥0? Y
检查自己的程序是否正确。
N
AL=0? Y
Y←-1
N Y←1
Y←0
返回DOS END
Kunming University of Science & Technology
注意:使用LOOP指令时,CX做计数器。
例4:编制软件延时程序,设CPU的时钟频率为5MHz,编写 1ms延时程序。
解:分析:用空指令NOP和循环指令来做延时的基本框架。
第一步:确定程序框架,如下:
DELAY_1MS: MOV CX, N ; 4*1, 根据延时时间确定N

华工微机原理实验四子程序设计实验报告

华工微机原理实验四子程序设计实验报告

华南理工大学微机原实验四:子程序设计一.实验目的1、学习子程序的定义和调用方法。

2、掌握子程序、子程序嵌套的结构。

3、掌握子程序的程序设计、编制及调试方法。

二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。

用户按任一键,重做,按ESC键,返回主菜单。

按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。

2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。

程序按ASCII码值大小由大到小排序并输出显示。

2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。

程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。

用户按任一键,重新对时,按ESC键,返回主菜单。

按5键,结束程序运行,返回系统提示符。

三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图四、源程序代码DATA SEGMENTORG9999HMENU DB0DH,0AH,'Programed by Deng Tengfei Class Electronic Material Grade 09',0DH,0AH,;菜单DB'Please input1~5to choose service',0DH,0AH,DB'1:Convert a small letter to a big letter',0DH,0AH,DB'2:Seek the bigest number',0DH,0AH,DB'3:Put the character string in order',0DH,0AH,DB'4:Set time and check time',0DH,0AH,DB'5:End the program$'MEG0DB'Please choose function$';提示信息MEG0~MEG8MEG1DB'You have choose the function1.',0DH,0AH,'Please input the character string you want to convert:$'MEG2DB'You have choose the function2.',0DH,0AH,'Please input the character string:$'MEG3DB'You have choose the function3.',0DH,0AH,'Please input the character string you want to sort$'MEG4DB'You have choose the function4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'MEG5DB'The program is end$'MEG6DB'Sorry.you have chosen a undefined function.Please input a correct function number$' MEG7DB'Fail to set time$'MEG8DB'Press any key to do again or press the ESC key to return to the main menu$'FLAG DB-1;冒泡排序中使用的标志DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC NEAR;主程序MOV AX,DATAMOV DS,AXCIN:LEA DX,MENU;输出提示信息MOV AH,09HINT21HCALL ENT;输出回车换行LEA DX,MEG0MOV AH,09HINT21HCALL ENTMOV AH,01HINT21HCMP AL,30H;判断功能号JLE EORCMP AL,31HJE F1CMP AL,32HJE F2CMP AL,33HJE F3CMP AL,34HJE F4CMP AL,35HJE F5EOR:CALL ENTLEA DX,MEG6;输出出错信息MOV AH,09HINT21HJMP CINF1:CALL ENT;功能1LEA DX,MEG1MOV AH,09HINT21HCALL ENTCALL FUN1;调用子程序1MOV AH,01HINT21HCMP AL,1BHJNE F1JMP CINF2:CALL ENT;功能2LEA DX,MEG2MOV AH,09HINT21HCALL ENTCALL FUN2;调用子程序2MOV AH,01HINT21HCMP AL,1BHJNE F2JMP CINF3:CALL ENT;功能3LEA DX,MEG3MOV AH,09HINT21HCALL ENTCALL FUN3;调用子程序3MOV AH,01HINT21HCMP AL,1BHJNE F3JMP CINF4:CALL ENT;功能4LEA DX,MEG4MOV AH,09HINT21HCALL ENTCALL FUN4;调用子程序4MOV AH,01HINT21HCMP AL,1BHJNE F4JMP CINF5:MOV AH,4CH;功能5,终止程序INT21HFUN1PROC NEAR;子程序1PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AH;字符串输入INT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI];设定循环次数MOV CH,0JIK:INC SIMOV AL,[SI]CMP AL,0DH;判断字符ASCII码JE KLCMP AL,61HJB JKCMP AL,7AHJA JKSUB AL,20H;小写转大写JK:MOV DL,AL;输出字符MOV AH,02HINT21HLOOP JIKCALL ENTLEA DX,MEG8MOV AH,09HINT21HKL:POP SIPOP DXPOP CXPOP AXRETFUN1ENDPFUN2PROC NEAR;子程序2PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI]MOV CH,0INC SIMOV AL,[SI]FH:INC SI;循环比较CMP AL,[SI]JA FGMOV AL,[SI]FG:LOOP FHMOV DL,ALMOV AH,02HINT21HCALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP SIPOP DXPOP CXPOP AXRETFUN2ENDPFUN3PROC NEAR;子程序3PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV BL,[SI]MOV BH,0INC SIMOV DI,SILP1:CMP FLAG,0;根据标志判断JE LP3DEC BX;检查循环次数CMP BX,0JE LP3MOV CX,BXMOV SI,DIMOV FLAG,0LP2:MOV AL,[SI];前后比较CMP AL,[SI+1]JLE NEXTXCHG AL,[SI+1]MOV[SI],ALMOV FLAG,0FFHNEXT:INC SILOOP LP2;内循环继续JMP LP1;退出内循环LP3:DEC DI;重新设定循环次数MOV CL,[DI]MOV CH,0LP4:INC DI;循环输出字符MOV DL,[DI]MOV AH,02HINT21HLOOP LP4CALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETFUN3ENDPFUN4PROC NEAR;子程序4PUSH AXPUSH BXPUSH CXPUSH DXCALL CROT;调用子程序CROTMOV CH,AL;装入入口参数MOV AH,01HINT21HCALL CROTMOV CL,ALMOV AH,01HINT21HCALL CROTMOV DH,ALMOV DL,0CALL ENTMOV AH,2DH;调DOS中断置时间INT21HCMP AL,0FFHJE FALPRT:PUSH DX;输出时间MOV AL,CHMOV AH,0MOV BL,0AHDIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HMOV AL,CLMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HPOP DXMOV AL,DHMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV AH,2CH;调DOS中断取时间INT21HMOV AL,0AH;写入OCW3OUT20H,ALNOP;延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPIN AL,20H;读取IRRAND AL,02HJNE MKCALL COV;调子程序COVJMP PRTFAL:LEA DX,MEG7MOV AH,09HINT21HMK:CALL ENTMOV AH,01HINT21HLEA DX,MEG8MOV AH,09HINT21HPOP DXPOP CXPOP BXPOP AXRETFUN4ENDPCROT PROC NEAR;子程序CROT,完成ASCII码转换成两位十进制数PUSH BXPUSH CXPUSH DXMOV BL,0;初始化BL和BHMOV BH,0AHMOV DX,02H;设循环次数GET:MOV AH,01HINT21HSUB AL,30HCMP AL,0JB FALCMP AL,09HJA FALXCHG AL,BLMUL BHADD AL,BLXCHG AL,BLDEC DXCMP DX,0JNE GETMOV AL,BLPOP DXPOP CXPOP BXRET CROT ENDPCOV PROC;格式控制,使光标回到上个制表位PUSH AXPUSH CXPUSH DXMOV CX,08HMOV AH,02HMOV DL,08HREC:INT21HLOOP RECPOP DXPOP CXPOP AXRETCOV ENDPENT PROC;格式控制,输出回车换行MOV DL,0DHMOV AH,02HINT21HMOV DL,0AHMOV AH,02HINT21HRETENT ENDPMAIN ENDPCODE ENDSEND MAI五、程序调试及运行结果:主菜单1、功能一(小写字母转大写字母):2、功能二(找出ASCII码最大的字符):3、功能三(按ASCII码把字符从大到小排列):4、功能四(显示跳动的时间):5、功能五(退出程序):如果是错误的输入,提示如下:六、实验心得通过这个实验,基本掌握了子程序的调用方法,子程序可以单独设计,主程序做好了,可以嵌套具体功能的子程序实现需求,这个实验子程序可以分开调试,子程序决定具体功能,主程序是一个框架,这点有种化大为小的思想,告诉我们一个复杂功能的程序,可以分模块,按功能,一部分一部分地实现,最后嵌套,进行最后调试。

微机原理微机原理讲义第4章课件

微机原理微机原理讲义第4章课件

Rambus内存条模块(Rdram)
7
存储器分类 随着计算机系统结构的发展和器件的发展,存
储器的种类日益繁多,分类的方法也有很多种
1)按构成存储器的器件和存储介质分类
存储器
磁芯存储器 半导体存储器 光电存储器 磁膜,磁泡存储器 光盘存储器
从理论上讲,只要有两个明显稳定的物理状态的器件和介
质都能用来存储二进制信息。
Y6
Y7
输入
输出
C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
00 0 01 111 111
00 1 10 111 111
01 0 11 011 111
01 1 11 101 111
10 0 11 110 111
10 1 11 111 011
11 0 11 111 101
11 1 11 111 110
微型计算机原理及应用
1
第四章 存储器是核心组成部分之一。因为 有了它,计算机才具有“记忆”功能,才能把程序及数据 的代码保存起来,才能使计算机系统脱离人的干预,而自 动完成信息处理的功能。
存储器的性能指标有:容量、速度和成本。
容量:指存储器所包含的存储单元的总数
4
在计算机系统中常采用三级存储器结构
Cache存储器
内存储器
主存储器(RAM和ROM)(使用半导体存储器芯片)
外存储器(软盘、硬盘、光盘) 后备存储器(磁带、光盘)
外存储器 (辅助存储器)
从整体看,其速度接近高速缓存的速度,其容量
接近辅助存储器的容量,而位成本接近廉价慢速
辅存的平均价格。
5
6
单列直插式内存条
半导体 存储器
掩膜ROM(Mask ROM)

微机原理第4章-汇编语言程序设计

微机原理第4章-汇编语言程序设计

(3) 表达式 表达式:由运算符 运算符连接起来的式子叫表达式, 运算符 按一定的规则对表达式进行运算后 得到一个数值或一个地址。 表达式可分为算术表达式 逻辑表达式 关 算术表达式、逻辑表达式 算术表达式 逻辑表达式、关 系运算表达式、分析运算表达式 分析运算表达式和合成运算 系运算表达式 分析运算表达式 合成运算 表达式。 表达式。
③ 关系运算表达式 用 EQ、NE、LT、GT、GE 和 LE 连 接 的 表 达式。若条件成立,其值为-1,否则为0。 例如: MOV BX, 5 GT 3 例如:指令 等价于 MOV BX, 0FFFFH ④ 分析运算表达式和合成运算表达式 分析运算表达式把存储器操作数分解为几 个组成部分;而合成运算式是把这些组成部分 综合为存储器操作数。
例4-1
位二进制数转换为ASCII码字 将4位二进制数转换为 位二进制数转换为 码字
符。当数在0000B-1001B时,对应的 当数在 时 对应的ASCII码为 码为 ‘0’~‘9’;当数在 ’ ‘ ’ 当数在1010B~1111B时,对应的 时 ASCII码为‘A’~‘F’。设待转换的数据已在累加 码为‘ 码为 。 器AL中(低4位)。 中 位
1.汇编语言源程序的结构(Program Structure) 汇编语言源程序的结构( 例4 - 2 完整的汇编语言源程序示例。 完整的汇编语言源程序示例。
NAME HEXTOASC ;***************************************************** DATA SEGMENT ; 数据段定义开始 HEX DB 5AH ASC DB 2 DUP(?) ; 数据段定义结束 DATA ENDS ;*****************************************************

微机原理第4章 汇编语言的程序设计4-4.5

微机原理第4章 汇编语言的程序设计4-4.5

5个 个 字节 10个 个 字
重复 4次 次
用地址表达式定义变量。 例4-23 用地址表达式定义变量。 如果当前已有变量PAR1,标号 如果当前已有变量 ,标号ADR2和ADR3, 和 , 可以用它们定义新的变量如下: 可以用它们定义新的变量如下: ONE DW PAR1 ONE 00 PAR1 TWO DW ADR2 01 偏移地址 THREE DD ADR3 TWO 00 ADR2
例4-36 MOV AH,0CH , MOV AL,7 , INT 21H
23Leabharlann DOS显示功能调用(功能见 显示功能调用 功能见P161表4-8) 表 )
表4-8 DOS显示功能调用 显示功能调用 AH 2 6 9 功能 显示一个字符,检验 显示一个字符,检验CtrlBreak键 键 显示一个字符, 显示一个字符,不检验 Ctrl-Break键 键 显示字符串 入口参数 DL=字符 字符 DL=字符 字符 DS:DX=串地址 串地址 说明 光标跟随字符 移动 光标跟随字符 移动 串以‘ 结束 串以‘$’结束 光标随串移动
26
返回 DOS操作系统 操作系统
MOV AH,4CH , INT 21H
27
.MODEL SMALL .386 .STACK 100H ;定义堆栈段 .DATA ;定义数据段 LIST1 DB 100 DUP(?) LIST2 DB 100 DUP(?) .CODE ;定义代码段 .STARTUP ;程序开始伪指令 CLD MOV SI,OFFSET LIST1 , MOV DI,OFFSET LIST2 , MOV CX,100 , REP MOVSB ……. ;程序代码 .EXIT 0 ;程序结束伪指令 END ;汇编结束伪指令

微机原理第04章4子程序

微机原理第04章4子程序
使用不同的数据段(注意修改DS),还可以在 子程序最后设置数据区(利用CS寻址) ⑻子程序的编写可以很灵活,例如具有多个出口 (多个RET指令)和入口,但一定要保证堆栈 操作的正确性 ⑼处理好子程序与主程序间的参数传递问题 ⑽提供必要的子程序说明信息(子程序名,入口 参数,出口参数,功能,程序)
9 可编辑ppt
;子程序dpchar:
11 可编辑ppt
第4章:含数据区的子程序
;子程序HTOASC:十六进制数转换为ASCII码
HTOASC proc
push bx
mov bx,offset ASCII
and al,0fh
xlat CS:ASCII;换码:AL←CS:[BX+AL]
pop bx ret ;数据区
执行CALL指令调用子程序 ⑶子程序中对堆栈的压入和弹出操作要成对使用,
保持堆栈的平衡 ⑷子程序开始应该保护使用到的寄存器内容,子
程序返回前相应进行恢复 ⑸子程序应安排在代码段的主程序之外,最好放
在主程序执行终止后的位置(返回DOS后、汇 编结束END伪指令前),也可以放在主程序开 始执行之前的位置
int 21h
pop bx
;逆序出栈,恢复寄存器
pop ax
ret
;子程序返回
dpchar endp
;过程结束
6 可编辑ppt
第4章:例4.15源程序
Sse segment stack Db 30 dup(?)
本程序不需要数据段
Sse ends
Code segment
Assume cs:code,ss:sse
可选的参数指定过程的调用属性。没有指定过 程属性,则采用默认属性
NEAR属性(段内近调用)的过程只能被相同 代码段的其他程序调用
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参数传递还可以通过堆栈这个临时存储
区。主程序将入口参数压入堆栈,子程 序从堆栈中取出参数;子程序将出口参 数压入堆栈,主程序弹出堆栈取得它们 采用堆栈传递参数是程式化的,它是编 译程序处理参数传递、以及汇编语言与 高级语言混合编程时的常规方法
第4章:4.7 宏(Macro)汇编
宏是具有宏名的一段汇编语句序列 宏需要先定义,然后在程序中进行宏调用 由于形式上类似其他指令,所以常称其为宏指 令 宏指令实际上是一段代码序列的缩写;在汇编 时,汇编程序用对应的代码序列替代宏指令 因为是在汇编过程中实现的宏展开,所以常称 为宏汇编
第4章:4.6.1 过程定义和 子程序编写
汇编语言中,子程序要用一对过程伪指令 PROC和ENDP声明,格式如下: 过程名 PROC [NEAR|FAR] …… ;过程体 过程名 ENDP 可选的参数指定过程的调用属性。没有指定过 程属性,则采用默认属性 NEAR属性(段内近调用)的过程只能被相同 代码段的其他程序调用 FAR属性(段间远调用)的过程可以被相同 或不同代码段的程序调用
第4章:参数传递
主程序与子程序间一个主要问题是参数传递 入口参数(输入参数) :主程序调用子程 序时,提供给子程序的参数 出口参数(输出参数) :子程序执行结束 返回给主程序的参数 参数的具体内容 传数值:传送数据本身 传地址:传送数据的主存地址 常用的参数传递方法 寄存器 共享变量(存储单元) 堆栈
第4章:宏与子程序的比较 比 结论 较 宏 子程序 结 论宏与子程序具有各自的特点,程序应 该根据具体问题选择使用那种方法

通常,当程序段较短或要求较快执行时, 应选用宏;当程序段较长或为减小目标代 码时,要选用子程序

第4章:教学要求
掌握常量表达、变量定义及应用、变量
和标号的属性及操作符 掌握汇编语言源程序的编辑、汇编、连 接和调试的开发方法 掌握基本伪指令和操作符:

第4章:2. 宏调用
宏定义之后就可以使用它,即宏调用: 宏名 [实参表] 宏调用的格式同一般指令一样:在使用宏指令 的位置写下宏名,后跟实体参数;如果有多个 参数,应按形参顺序填入实参,也用逗号分隔 在汇编时,宏指令被汇编程序用对应的代码序 列替代,这就是宏展开 宏展开的具体过程是:当汇编程序扫描源程序 遇到已有定义的宏调用时,即用相应的宏定义 体完全替代源程序的宏指令,同时用位置匹配 的实参对形参进行取代
dispmsg macro message mov ah,9 lea dx,message int 21h endm … dispmsg string … 1 mov ah,9 1 lea dx,string 1 int 21h ;;宏定义 ;;宏定义体
;宏调用(宏指令) ;宏展开
第4章:宏与子程序的比较 比 较 宏 子程序
第4章:例4.15源程序
Sse segment stack 本程序不需要数据段 Db 30 dup(?) Sse ends Code segment Assume cs:code,ss:sse start: mov ax,23h mov dl,‘?’ ;主程序提供显示字符 call dpchar ;调用子程序 mov ax,4c00h int 21h 主程序部分

第4章:4.6.2 用寄存器传递参数
最简单和常用的参数传递方法是通过寄存器, 只要把参数存于约定的寄存器中就可以了 由于通用寄存器个数有限,这种方法对少量数 据可以直接传递数值,而对大量数据只能传递 地址 采用寄存器传递参数,注意带有出口参数的寄 存器不能保护和恢复,带有入口参数的寄存器 可以保护、也可以不保护,但最好能够保持一 dpstri HTOASC 致 dpchar
子程序安排在主程序执行终止后的位置
第4章:子程序编写注意事项(续)
⑹子程序允许嵌套和递归 ⑺子程序可以与主程序共用一个数据段,也可以 使用不同的数据段(注意修改DS),还可以在 子程序最后设置数据区(利用CS寻址) ⑻子程序的编写可以很灵活,例如具有多个出口 (多个RET指令)和入口,但一定要保证堆栈 操作的正确性 ⑼处理好子程序与主程序间的参数传递问题 ⑽提供必要的子程序说明信息(子程序名,入口 参数,出口参数,功能,程序)
第4章:含数据区的子程序
;子程序HTOASC:十六进制数转换为ASCII码 HTOASC proc push bx mov bx,offset ASCII and al,0fh xlat CS:ASCII;换码:AL←CS:[BX+AL] pop bx 入口参数:寄存器AL,传数值 ret 出口参数:寄存器AL,传数值 ;数据区 ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db 41h,42h,43h,44h,45h,46h HTOASC endp

第4章:子程序编写注意事项
⑴子程序要利用过程定义伪指令声明 ⑵子程序最后利用RET指令返回主程序,主程序 执行CALL指令调用子程序 ⑶子程序中对堆栈的压入和弹出操作要成对使用, 保持堆栈的平衡 ⑷子程序开始应该保护使用到的寄存器内容,子 程序返回前相应进行恢复 ⑸子程序应安排在代码段的主程序之外,最好放 在主程序执行终止后的位置(返回DOS后、汇 编结束END伪指令前),也可以放在主程序开 始执行之前的位置

第4章:宏的实例1
dispchar macro char mov ah,2 mov dl,char int 21h endm … dispchar ‘?’ … 1 mov ah,2 1 mov dl,’?’ 1 int 21h ;;宏定义 ;;宏定义体
;宏调用(宏指令) ;宏展开
第4章:宏的实例2
EQU/=;+-*/;DB/DW/DD、?/ DUP;ORG/$、OFFSET/SEG/PTR; END;PROC/ENDP
第4章:教学要求(续)
掌握基本的顺序、分支、循环和子
程序设计方法 熟悉常见程序设计问题:
多精度运算,查表(查代码、特定值 等)、ASCII和BCD代码转换;数据范 围判断(0~9、A~Z、a~z)、字母大 小写转换;字符串传送、比较等操作、 求最小最大值、数据求和、统计字符个 数
第4章:例4.16 显示以“0” 结尾字符串的嵌套子程序
msg
;数据段 db 'Well, I made it !',0 ;代码段(主程序) mov si,offset msg ;主程序提供显示字符串 call dpstri ;调用子程序
第4章:例4.16 子程序
;子程序dpstri:显示DS:SI指向的字符串(以0结尾) dpstri proc push ax dps1: mov dl,[si] ;取显示字符 inc si cmp dl,0 ;是结尾,则显示结束 jz dps2 call dpchar ;调用字符显示子程序 jmp dps1 dps2: pop ax 入口参数:寄存器DS:SI,传地址 ret 出口参数:无 dpstri endp ;子程序dpchar:
第4章:多出口子程序
;子程序HTOASC:十六进制数转换为ASCII码 HTOASC proc and al,0fh cmp al,9 jbe htoasc1 add al,37h ;是A ~ F,加37H ret ;子程序返回 htoasc1: add al,30h ;是0 ~ 9,加30H ret ;子程序返回 HTOASC endp

第4章:1. 宏定义

宏定义由一对宏汇编伪指令MACRO和ENDM 来完成,格式如下: 宏名 MACRO [形参表] …… ;宏定义体 ENDM
其中宏名是符合语法的标识符,同一源程序中 该名字定义唯一。宏定义体中不仅可以是硬指 令序列,还可以是伪指令语句序列 可选的形参表给出了宏定义中用到的形式参数, 每个形式参数之间用逗号分隔
第4章:例4.15源程序(续)
dpchar proc push ax mov ah,02h int 21h pop ax ret dpchar endp end start ;过程定义,过程名为dpchar ;顺序入栈,保护寄存器 ;输出一个字符功能 ;逆序出栈,恢复寄存器 ;子程序返回 ;过程结束 入口参数:寄存器DL,传数值 出口参数:无
计算机接口技术 (汇编与接口)
第四章 汇编语言程序设计4
主要内容:
汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用 汇编语言程序设计
第4章:4.6 子程序设计
把功能相对独立的程序段单独编写和调
试,作为一个相对独立的模块供程序使 用,就形成子程序 子程序可以实现源程序的模块化,可简 化源程序结构,可以提高编程效率 主程序(调用程序)需要利用CALL指令 调用子程序(被调用程序) 子程序需要利用RET指令返回主程序
第4章:例4.15 用dos功能调 用输出一个字符的子程序
;主程序 mov dl,‘?’ ;主程序提供显示字符 call dpchar ;调用子程序 ;子程序:显示AL中的字符 dpchar proc ;过程定义,过程名为dpchar push ax ;顺序入栈,保护寄存器 push bx mov ah,02h ;输出一个字符功能 int 21h pop bx ;逆序出栈,恢复寄存器 pop ax ret ;子程序返回 dpchar endp ;过程结束

第4章:4.6.3 用共享变量传递参数
子程序和主程序使用同一个变量名
存取数据就是利用共享变量进行参 数传递 如果主程序还要利用原来的变量值, 则需要保护和恢复 利用共享变量传递参数,子程序的 通用性较差,但特别适合在多个程 序段间、尤其在不同的程序模块间 传递数据
第4章:4.6.4 用堆栈传递参数

仅是源程序级的简化: 宏调用在汇编时进行 程序语句的展开,不 需要返回;不减小目 标程序,执行速度没 有改变 通过形参、实参结合 实现参数传递,简捷 直观、灵活多变
相关文档
最新文档