1
微机原理及应用实际操作 (实现?)
DATA1 SEGMENT ;
X DB 05H
Y DB 04H
Z DB?
DATA1 ENDS
CODE1 SEGMENT ;
ASSUME CS,CODE,DS,DATA
START,MOV AX,DATA1 ;
MOV DS,AX ;
MOV AL,X ;
ADD AL,Y ;
MOV Z,AL;
MOV AH,4CH ;送功能号
INT 21H ;系统功能调用,返回操作系统
CODE1 ENDS
END START
实际操作 (实现 X+Y→Z)
DATA1 SEGMENT ; 数据段
X DB 05H
Y DB 04H
Z DB?
DATA1 ENDS
CODE1 SEGMENT ;代码段
ASSUME CS,CODE,DS,DATA
START,MOV AX,DATA1 ; 数据段基址 → AX
MOV DS,AX ; AX →DS
MOV AL,X ; 内存单元 X的数据 → AL
ADD AL,Y ; 内存单元 Y的数据 +AL→AL,即 X+Y →AL
MOV Z,AL; AL→ 内存单元 Z,即求和结果送回 Z
MOV AH,4CH ;送功能号
INT 21H ;系统功能调用,返回操作系统
CODE1 ENDS
END START
3
微机原理及应用
DATA_SEG1 SEGMENT
…………
DATA_SEG1 ENDS
DATA_SEG2 SEGMENT
…………
DATA_SEG2 ENDS
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2
START,MOV AX,DATA_SEG1
MOV DS,AX
MOV AX,DATA_SEG2
MOV ES,AX
:,,;完成具体操作的指令序列
CODE_SEG ENDS
END START
第 4章 汇编语言程序设计
5
微机原理及应用本章主要内容:
汇编语言源程序的结构
汇编语言语句格式
伪指令
功能调用
汇编语言程序设计
6
微机原理及应用子程序定义伪指令
格式,〈 过程名 〉 PROC [NEAR]( 或 [FAR])
:::
〈 过程名 〉 ENDP
过程名是自定义符 。 定义过程是为实现子程序调用而设的 。
调用格式为:
CALL 〈 过程名 〉
过程由 RET指令返回,它可以不是最后一条指令,
它在过程中可以设多点返回 。 并且过程起始名和终止名必须相同 。
7
微机原理及应用例 题
CODE_SEG SEGMENT
BEGIN PROC FAR

CALL NEAR A

CALL FAR B

BEGIN ENDP
A PROC NEAR

RET
A ENDP
CODE_SEG ENDS
CODE_SEG1 SEGMENT
B PROC FAR

RET
B ENDP
CODE_SEG1 ENDS
8
微机原理及应用定位伪指令
格式:
ORG 〈 表达式 〉
该伪指令把以下语句定义的内存数据或程序,从表达式指定的起点 ( 偏移地址 ) 开始连续存放,直至遇到新的 ORG指令 。 表达式的值是一个无符号数 。
DATA SEGMENT
ORG 0100H
D1 DB 11H,22H,33H
DATA ENDS
11
22
33
DS:0100
计算值为非负常数
9
微机原理及应用
4.3 系统功能调用一、系统功能调用概述
为给编写汇编语言源程序提供方便,MS-DOS系统中设置了几十个内部子程序,它们可完成 I/O设备管理,存储管理,文件管理和作业管理等功能 。 其入口地址已由系统置入中断入口地址表中,在汇编语言源程序中可用 软件中断指令 调用它们 。
DOS 功能调用 高级调用,操作系统提供
BIOS功能调用 低 级调用
10
微机原理及应用
DOS 功能调用
包含多个子功能的功能包,用软中断指令调用,中断类型码固定为 21H
各子功能采用功能号来区分
11
微机原理及应用二、系统功能调用方法
系统功能调用中的几十个子程序成为汇编语言程序员的重要工具,调用它们时采用统一的格式,只需要使用三个语句,如下所示:
( 1) 传送入口参数到指定寄存器中;
( 2) 功能号送入 AH寄存器中;
( 3) INT 21H。
有的子程序无入口参数,则只需安排后两个语句,
调用结束后,系统将出口参数送到指定寄存器中或从屏幕显示出来 。
12
微机原理及应用常用的系统功能调用 P159
常用的系统功能调用有以下 14个,
( 1)键盘输入单字符 ( 7)从串口输入单字符
( 2)键盘输入字符串 ( 8)向串口输出单字符
( 3)输出单字符 ( 9)返回操作系统
( 4)输出字符串 ( 10)设置日期
( 5)设置时间 ( 11)取得日期
( 6)取得时间 ( 12)无回显键盘输入单字符
( 13)直接控制台输入 /输出单字符
( 14)无回显直接控制台输入单字符
13
微机原理及应用键盘输入单字符
键盘输入单字符 —— 1号系统功能调用
格式:
MOV AH,1
INT 21H
说明,该调用没有入口参数,执行 1号系统功能调用时,系统等待键盘输入,待程序员按下任何一键,系统先检查是否 Ctrl-Break键,如果是则退出,否则将键入字符的 ASCII码 置入 AL寄存器 中,并在屏幕上显示该字符 。
注意,区分 1,7和 8号功能
14
微机原理及应用单字符输入例
GET_KEY,MOV AH,1
INT 21H
CMP AL,’Y’
JZ YES
CMP AL,’N’
JZ NO
JNZ GET_KEY
YES,┇
NO,┇
交互式应答程序;输入的字符在 AL中当第一、二条指令执行完时,
系统等待键盘按键。按下任一字符时,AL中的内容即为该字符的 ASCII码,同时显示器上显示出所按下的字符。
15
微机原理及应用键盘输入字符串
键盘输入字符串 —— 0AH号系统功能调用
格式:
BUF DB 20
DB?
DB 20 DUP(?)
:,,
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H;代码段中 0A功能调用;字符串在内存中的存放地址在数据段中定义 缓冲区
16
微机原理及应用定义字符缓冲区
用户自定义缓冲区格式:
0DHN1 N2
整个缓冲区最大键入字符数实际键入字符数从第三个字节开始用来存放键入的字符串
17
微机原理及应用输出单字符
输出单字符 — 2号系统功能调用
格式:
MOV DL,‘A’
MOV AH,2
INT 21H
说明,执行 2号系统功能调用时,将置入 DL寄存器中的字符从屏幕上显示输出 (或打印 )。;待输出字符’ A‘送到 DL中
18
微机原理及应用输出字符串
输出字符串 —— 9号系统功能调用
格式:
BUF DB ‘good bye $’
MOV DX,OFFSET BUF
MOV AH,9
INT 21H
说明,执行 9号系统功能调用时,将内存缓冲区 BUF
中存放的字符串送屏幕显示输出(或打印),缓冲区中的字符串 必须 以,$” 字符作为结束标志。
待输出字符串的偏移地址
19
微机原理及应用例
...
BUFF2 DB ‘How do you do! $’
...
MOV DX,OFFSET BUFF2 ;送字符串的首地址至 DX
MOV AH,09H ;送功能号
INT 21H ;系统功能调用显示字符串执行以上几条指令后,屏幕上将显示:
How do you do!
20
微机原理及应用字符串输出显示例
DATA SEGMENT
MESS1 DB ‘Input String:’ 0DH,0AH,’$’
DATA ENDS
CODE SEGMENT

MOVAH,09
MOVDX,OFFSET MESS1
INT 21H

21
微机原理及应用返回操作系统
返回操作系统 —— 4CH号系统功能调用
格式,MOV AH,4CH
INT 21H
说明,该调用没有入口参数,执行结果是结束当前正在执行的程序,并返回操作系统。屏幕显示操作系统提示符( N>),N为当前使用驱动器名。
22
微机原理及应用设置时间
设置时间 —— 2DH系统功能调用
格式:
MOV AH,2DH
INT 21H
说明,如果设置成功,则将 AL寄存器内容清,0”,否则将 AL寄存器置全置,1” 。如当前有效时间是 8点 15分 20.5秒,应将小时数8
置入 CH寄存器,分钟数 15置入 CL寄存器中,秒数 20置入 DH寄存器中,百分之一秒数 50置入 DL寄存器中。
MOV CX,0815H
MOV DX,2050H
MOV AH,2DH
INT 21H
23
微机原理及应用取得时间
取得时间 —— 2CH号系统功能调用
格式,MOV AH,2CH
INT 21H
说明,该调用没有入口差数,执行结果是将当前时间送入 CX和
DX寄存器中供使用。
从串口输入单字符 —— 3号系统功能调用
格式,MOV AH,3
INT 21H
说明,该调用没有入口参数,系统将从异步通信口串行输入的字符置入 AL寄存器中。
从串口输入单字符
24
微机原理及应用向串口输出单字符
向串口输出单字符 —— 4号系统功能调用
格式,MOV DL,‘$’
MOV AH,4
INT 21H
说明,执行结果将 DL寄存器中的字符通过异步通信口串行输出。
无回显键盘输入单字符
无回显键盘输入单字符 —— 8号系统功能调用
格式,MOV AH,8
INT 21H
说明,它没有入口参数,与 1号系统功能调用的区别仅在于键入的字符不送屏幕显示。
25
微机原理及应用设置日期
设置时间 —— 2BH号系统功能调用
格式,MOV AH,2BH
INT 21H
说明,将年号以装配型 BCD码形式置入 CX寄存器中,将月号置入 DH
寄存器中,将日期置入 DL寄存器中,然后调用如果设置成功,则 AL
寄存器为全 0,否则 AL寄存器将为全 1,从此以后日期会自动修改 。
取得日期
取得日期 —— 2AH号系统功能调用
格式,MOV AH,2AH
INT 21H
说明,该调用没有入口参数,执行结果是将年号置入 CX寄存器中,
月份和日期置入 DX寄存器中。
26
微机原理及应用一个完整源程序结构例
DSEG SEGMENT
DATA1 DB 1,2,
DATA2 DW 1234H
DSEG ENDS
ESEG SEGMENT
DB 20 DUP(?)
ESEG ENDS
SSEG SEGMENT STACK ‘STACK’
DB 200 DUP(?)
SSEG ENDS
27
微机原理及应用一个完整源程序结构例
CSEG SEGMENT
ASSUME CS,CSEG,DS,DSEG,
ES,ESEG,SS,SSEG
START,MOV AX,DSEG
MOV DS,AX
MOV AX,ESEG
MOV ES,AX
MOV AX,SSEG
MOV SS,AX

CSEG ENDS
END START
源程序代码
28
微机原理及应用程序的编辑、汇编及连接过程
汇编语言的程序一般要经过编辑,汇编 ( MASM或
ASM),连接 ( LINK) 和调试 ( DEBUG) 这些步骤 。
1,建立源程序文件
2,汇编 ( MASM或 ASM) 源程序
3,程序连接
4,执行程序
5,调试程序
29
微机原理及应用汇编语言程序设计与执行过程
输入汇编语言源程序 源文件,ASM
汇编(编译) 目标文件,OBJ
链接 可执行文件,EXE
调试 最终程序
30
微机原理及应用
31
微机原理及应用实验操作步骤
在 MS-DOS下,用 Edit命令进入编辑状态,完成所编写程序的输入。
程序编写完成后,将文件保存为 xx.asm,并退出编辑状态。
用 masm命令对所编写的程序进行编译,格式如下:
masm xx; 回车
用 link命令对所编写的程序进行连接,格式如下:
link xx; 回车
运行程序命令格式如下:
xx; 回车
32
微机原理及应用实验操作步骤
用 debug 命令对所编写的程序进行调试,格式如下:
debug xx.exe 回车
常用的 debug命令:
,T”回车,单步运行程序并显示寄存器状态。
,R”回车,显示各寄存器内容。
,DDS:XX”回车,察看数据段中偏移量为 XXH的内存单元中的内容。
,U”回车,反汇编当前机器码,也就是显示待执行的汇编语句。
,G XX”回车,执行内存中的可执行代码,直到偏移量为 XXH的代码为止。
,Q”回车,退出 DEBUG调试状态。
在提示符状态下输入,Exit”命令,退出 DOS模式。
33
微机原理及应用
4.4 汇编语言程序设计设计步骤:
根据实际问题抽象出数学模型
确定算法
画程序流程图
分配内存工作单元和寄存器
程序编码
调试
34
微机原理及应用简单程序
简单程序是最简单的形式,计算机执行程序的方式是
,从头到尾,,逐条执行指令语句,直到程序结束 。
例:将内存 ( 10050H) 单元的内容拆成两段,每段 4
位,并将它们分别存入内存 ( 10051H) 和 ( 10052H)
单元 。 即 ( 10050H) 单元中的低 4位放入 ( 10051H)
低 4位,( 10050H) 单元中的高 4位放入 ( 10052H) 的低 4位,而 ( 10051H) 和 ( 10052H) 的高 4位均为零 。
35
微机原理及应用简单程序例题设 ( 10050H) = 7 AH,程序如下:
MOV AX,1000H
MOV DS,AX ;DS=1000H
MOV SI,50H ;需拆字节 7AH的地址赋给 (SI)=50H
MOV AL,[SI] ;取 10050H中内容到 AL中,;( AL) =7AH
AND AL,0F H ;把 AL中的前 4位清 0,;( AL) =0AH
01111010
AND 00001111
00001010
36
微机原理及应用简单程序例题
MOV [SI+1],AL ;把 OAH→( 10051H)单元
MOV AL,[SI] ;把 10050H内容到 AL中,;( AL) =7AH
MOV CL,4
SHR AL,CL ;逻辑右移四次,前 4位补 0,; AL=(07H)
MOV [SI+2],AL ; 放入 ( 10052H) 单元
37
微机原理及应用分支程序分支程序是利用 条件指令,使程序执行到某一指令后,
根据条件是否满足,来改变程序执行的次序 。这类程序使计算机有了判断作用。
38
微机原理及应用分支程序例题 1
例 1:求 AX累加器和 BX寄存器中两个无符号数之差的绝对值,结果放在内存 ( 2800) 单元中 。
否是分支程序例题 1
CLC ;清除 CF
CMP AX,BX ;AX-BX≥0?
JC AA ;CF=1,转 AA执行
SUB AX,BX ;AX←AX -BX
MOV DI,2800H ;结果指针 DI=2800H
MOV [DI],AX ;结果送至 2800,2801H单元
HLT
AA,SUB BX,AX ;BX←BX -AX
MOV DI,2800H
MOV [DI],BX
HLT
40
微机原理及应用循环程序
循环程序是 强制 CPU重复执行某一指令系列 的一种程序结构形式,凡是要重复执行的程序段都可以按循环结构设计 。 循环结构程序 简化了程序执行过程 。 相反,
增加了一些循环控制等环节,总的程序执行语句和时间会有所增加 。
循环程序的组成:
循环程序的组成可分为 初始化,循环化,循环控制 和循环结束处理 。
41
微机原理及应用循环程序
( 1 ) 初始化,完成建立 循环次数计数器,设定变量和存放数据的内存地址指针的 初值,装入暂存单元的初值等 。
( 2 ) 循环体,是程序的处理部分
( 3 ) 循环控制,包括 修改指针,
修改变量 为下一次循环作准备,
以及修改循环计数器,判断循环次数完成否 。
( 4 ) 结束处理,主要用来分析和存放程序的结果 。 循环程序基本结构框图
42
微机原理及应用循环程序例题 1
例 1:要求将 DATA1,0000地址开始的 100H个数据送到 DATA2,0000开始的单元中去
MOV AX,DATA1
MOV DS,AX ;设置源操作数段首地址
MOV AX,DATA2
MOV ES,AX ;设置目的操作数段首的地址
MOV SI,0 ;源操作数偏移地址送至 SI
MOV DI,0 ;目的操作数偏移地址送至 DI
MOV CX,0100 ;传送的字节数送 CX寄存器
43
微机原理及应用循环程序例题 1
CLD ;使 DF=0指针按增量方向修改
NEXT:MOVSB ;将源地址的 1个字节送到目的地址 单元
DEC CX ;字节数减 1
JNZ NEXT ;100H字节如未传送完,则继续传送

其中 NEXT,MOVSB
DEC CX
JNZ NEXT
可用一条语句 REP MOVSB 代替
44
微机原理及应用例题试编写一程序:比较两个字符串
STRING1和 STRING2所含的字符是否相同。
若相同则显示 ‘ MATCH’,否则显示 ‘ NO
MATCH’。
45
微机原理及应用程序:
DATA1 SEGMENT
STRING1 DB 10,?,10 DUP (?)
STRING2 DB 10,?,10 DUP (?)
MESS1 DB 'MATCH$'
MESS2 DB 'NO MATCH$'
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1,DS:DATA1
STT,MOV AX,DATA1
MOV DS,AX
MOV ES,AX;定义数据段注意:缓冲区的定义方法
46
微机原理及应用程序(续) LEA DX,STRING1
MOV AH,0AH
INT 21H
MOV DL,0DH
MOV AH,6
INT 21H
MOV DL,0AH
MOV AH,6
INT 21H
LEA DX,STRING2
MOV AH,0AH
INT 21H;手动输入字符串 1;手动输入字符串 2;换行回车
47
微机原理及应用
LEA SI,STRING1
LEA DI,STRING2
MOV CL,[SI+1]
MOV BL,[DI+1]
CMP CL,BL
JNE NOM
CLD
MOV CH,0
REPZ CMPSB
JZ MAT
NOM,LEA DX,MESS2
JMP SHORT DISP1
程序(续)
MAT,LEA DX,MESS1
DISP1,MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE1 ENDS
END STT
思路:先比较两字串长度是否相等,等长则逐一比对各字符是否相同
48
微机原理及应用注意:
指令 REPZ CMPSB的操作
REPZ,ZF= 1,且 ( CX) ≠ 0时重复
CMPSB,( SI)-( DI)
( SI+1),( DI+1)
CX的自动修改
在键盘输入字符串( 0AH功能调用)时,其默认的字串写入区域是 DS:DX
P84
49
微机原理及应用
第 6周 周五 1.2节
实验:实验二 2.3,1,2,选做 3
实验报告:( 16开作业纸,下次上课交)
标题,实验题目
一 实验目的二 实验内容和要求三 实验电路
四 实验程序(加注释)
五 实验结果
1,操作步骤
2,实验结果六 结果分析和总结
1,对结果的分析
2,个人总结