微机原理与接口技术实验指导书
MOV AH,1
INT 21H ;从键盘输入单个字符,存在AL中,并在计算机屏幕
上显示。
9号功能调用
9号功能是显示一个字符串(非单个字符),在调用INT 21H显示前要求: 将字符串的首地址放在DS:DX中 字符串的结束符为‘$‘,‘$‘不显示。 将功能号放入AH中。
MOV AH,9
MOV DX,OFFSET (string) INT 21H ;
3.8086汇编语言程序结构
汇编语言源程序:由指令助记符+伪指令组成 源程序 → 可执行程序 指令助记符:前面讲的各种指令
伪指令:告诉编译和连接软件如何编译和连接。 1)汇编语言程序由指令和伪指令组成。 2)汇编语言程序由段组成。 堆栈段---伪指令设置
STACK SEGMENT STACK
DW 100 DUP(?)
STACK ENDS
以上三行为在内存中留出一块空间作为堆栈段用,这块空间起个段名为STACK,
汇编语言程序中段必须有段名,以便称呼,段名可以任取。这块堆栈段的空间大小是200个字节。DW是按字WORD留出位置,一个字为2个字节。100 DUP(?)为留出100个位置,DUP为重复的,(?)表示留出位置。
SP的初值为执行PUSH R/M指令可按字将数据存入到堆栈段中。未存入数据时,200,存入一个字数据后,SP的值自动减2,不断存入数据,SP就不断减2,直至减为0时,此堆栈段最多可存入100个字数据。
20
数据段---伪指令设置(定义) DATA
SEGMENT
DB ?HELLO!‘,‘$‘
X
DATA ENDS
以上三行为在内存中留出一块空间作为数据段用,这块空间起个段名为DATA。这块数据段用示意图可表示为:
数据段中DB表示以字节为单位留出位置,其中放置字符串‘HELLO!‘和‘$‘。 可见,该数据段的大小占7个字节,数据段中第1个地址名称为X。
X为变量名,在汇编语言程序中,变量名是存储器的偏移地址,此处,X相对于本段起始位置的偏移量为0。变量X的值,即其中存储的内容为字符‘H‘,计算机中字符以ASCII码形式存放,‘H‘存放的是0100 1000B。
图2.1.6 数据在数据段里的存放方式
码段(用于放置用户编写的指令)
CODE
SEGMENT 。。。 ENDS
ASSUME CS:CODE,DS:DATA,SS:STACK
CODE
码段中内容
是一条伪指令,它的作用是告诉汇编工具软件名为CODE的段由段寄存器CS寻址,名为DATA的段由段寄存器DS寻址,名为STACK的段由段寄存器SS寻址。
CODE段由CS寻址,即由CS给出段地址,也即名为CODE的段是码段。同理,名为DATA的段是数据段,名为STACK的段是堆栈段。
一个码段中可以放置多段程序,每段程序又称为一个过程。一个过程的书写格式为:
21
微机原理与接口技术实验指导书
过程名
PROC NEAR/FAR
。。。
ENDP
过程名
3)程序段前缀
源程序被编译连接后生成一个可执行程序(*. EXE)存放在磁盘上,当执行该可执行程序时,操作系统将该可执行程序从磁盘上调入内存。磁盘为外存,用于存放程序,内存是半导体存储器,速度快,用于执行程序,程序都是在内存中执行的。
当可执行程序被调入内存时,操作系统为其分配地址,同时在可执行程序的最先面加上一个256字节的程序段前缀PSP。假设程序在内存的放置如下图所示。
图2.1.7 程序在内存的存放方式
假设操作系统将PSP放在1234H:0开始的地址中,操作系统就使DS=1234H;假设堆栈段被放在从2234H:0至2234H:200中,就使SS=2234H,SP=200(堆栈从下向上堆着存放);假设码段中指令的二进制代码被放在从4234H:0开始的地址中,就使CS=4234H,IP=0,该地址开始的内存中放的是
PUSH DS
指令的二进制代码。
程序执行从当前CS和IP所给地址开始执行,即将1234H和0000H入栈保存。堆
22
栈中存储内容如下图所示。
图2.1.8 程序执行过程对堆栈段的操作
4.实验编程提示 1)冒泡算法
图2.1.9 冒泡算法原理图
2)编程提示
A) 定义数据段用于存放输入的字符
DATA STR
SEGMENT
DB 100 DUP(‘$‘) ENDS
;最多可存放100字符
DATA
;超过100个就会出数据段,冲掉码段
;输入的字符会复盖‘$‘
B)输入字符及计算字符个数
MOV SI,OFFSET STR
23
;存放的首地址偏移量
微机原理与接口技术实验指导书
NEXT: MOV AH,1
INT 21H MOV [SI],AL INC SI
;存入数据段 ;指向下一个地址 ;是回车键吗? ;不是,继续输入 ;SI=输入字符个数
;AL=输入字符
CMP AL,0DH JNE NEXT ;
*回车是否参与排序,按从大到小还是从小到大都影响输出结果。 5.程序参考流程图
图2.1.10 字符串排序程序参考流程图
六、实验步骤
1. 打开运行TPC-ZK-II集成开发环境(注意事项7.1);
2. 建立新的.asm空白文件,将编写好的程序拷贝到空白文件内,或者直接在TPC-ZK-II集成开发环境运行界面下打开已编写好并且保存的汇编语言源程序文件,保存该文件(注意事项7.2);
3. 对程序进行编译、连接、运行。从键盘输入一定长度的字符串,最后按回车结束输入并开始排序(注意事项7.3);
24