【微机复习】第四章----汇编语言程序设计

1)先看看完整的段定义格式:
.586
DATA SEGMENT USE16
	……
DATA ENDS
CODE SEGMENT USE16
	ASSUME CS:CODE,DS:DATA
BEG : MOV AX, DATA
      MOV DS,AX
	  ……
	  MOV AH,4CH
	  INT 21H
CODE ENDS
END BEG

由上面程序段可知:
.586开头,不同的伪指令表明程序中能使用的指令不一样。
②段定义格式是 :
DATA SEGMENT USE16
……
DATA ENDS
USE16意思是寻址方式为16位。指令结束是 DATA ENDS , 是ENDS,是ENDS,是ENDS!!!
③主程序中:
BEG : MOV AX, DATA
MOV DS,AX
……
MOV AH, 4CH
INT 21H
END BEG
注意,汇编程序结束是END BEG,END在前面,是END, END ,END!!! 与段定义结束不同!!
④DOS返回
MOV AH,4CH
INT 21H

2)源程序编程格式

①EXE文件的编程格式
实模式下,每个逻辑段的目标块<=64KB,适合编写大型程序
②COM文件的编程格式
只允许使用代码段,代码段目标块<64K。需使用定位ORG伪指令启动指令存放在代码段偏移地址为100H的单元。 适合编写中小型程序。
实际写程序时,我们采用EXE格式。

3)DOS功能调用,INT 21H执行

①功能号01H,响应CtrlC,输入一个字符
MOV AH, 01H
INT 21H
执行上述指令,AL寄存器中将得到输入字符的ASCII,同时输入字符会显示在屏幕上。
②功能号02H,响应CtrlC,显示一个字符
MOV AH, 02H
MOV DL, 41H ;也可以写成 MOV DL, ‘A’,DL中保存的是ASCII
INT 21H
执行上述指令,屏幕显示字符 A
注意: 会破坏AL寄存器,要先转移AL寄存器中的重要数据。
③功能号07H,不响应CtrlC,输入一个字符
MOV AH,07H
INT 21H
执行上述指令,AL寄存器中将得到输入字符的ASCII,但是输入字符不会显示在屏幕上。
④功能号08H,响应CtrlC,输入一个字符
MOV AH,08H
INT 21H
执行上述指令,AL寄存器中将得到输入字符的ASCII,但是输入字符不会显示在屏幕上。
⑤功能号09H,响应CtrlC,显示字符串
数据段:
SSS DB ‘ABCD$’ ;字符串要以 $ 结尾
代码段:
MOV AH,09H
MOV DX,OFFSET SSS
INT 21H
执行上述指令,屏幕会显示一串字符,遇到 $ 结束显示。
⑥功能号0AH,响应CtrlC,输入字符串
数据段:
BUF DB 15  ;预置可容纳的字符个数(包括回车键)
  DB ?  ;实际接收的字符个数(不包括回车键)
  DB 15 DUP(?)  ;输入字符串的实际存储区域
代码段:
MOV AH,0AH
MOV DX,OFFSET BUF
INT 21H

4)BIOS键盘功能调用,INT 16H执行

①功能号00H,读取键盘缓冲区内容
MOV AH,00H
INT 16H
执行上述指令,AL = 输入字符的ASCII。
②功能号01H,查询键盘缓冲区
MOV AH, 01H
INT 16H
查看 Z 标志,若 Z = 0,表示有输入,此时AL = 输入字符的ASCII。若 Z = 1,表示没有输入。

5)子程序设计

①定义格式
例子:COMPUTE 是子程序名称,结束伪指令是ENDP
COMPUTE PROC
 …… ;程序代码
COMPUTE ENDP
②用寄存器传递参数
在主程序中将数据存进寄存器,子程序可调用寄存器中的数据,同时子程序也可以将数据存进寄存器供主程序调用。由于寄存器数量有限,因此适合于参数较少的情况。
③用内存单元传递参数
主程序和子程序可以访问相同的内存单元来存储数据,从而达到共享参数的目的。这种方法适用于参数较多的情况。
④主程序和子程序可以采用堆栈来传递参数,主程序将入口参数压入堆栈,子程序从堆栈中取出参数。这种方法相对较繁琐,且容易造成数据出错,不建议使用。

6)宏指令设计

①宏指令的定义
例子:
ABS MACRO VAR ;可以有多个参数,如ABS MACRO VAR,VAR1,VAR2,也可以没有参数
  LOCAL NEXT ;可以有多个局部标号,用逗号隔开即可,如LOCAL LAST,NEXT
  CMP VAR , 0  ;将传递进来的参数 VAR 与 0 比较
  JGE NEXT
  NEG VAR
NEXT:
  ENDM
上述程序中,ABS是宏名称,VAR是传递进宏的参数,可以有多个参数用逗号隔开即可,也可以没有参数,LOCAL伪指令定义局部标号名称,必须紧接着MACRO定义,防止与主程序中的其他标号、变量重名,结束伪指令是ENDM。

7)宏指令与子程序的区别

①共同点:宏指令与子程序都可以简化程序设计,增强程序可读性。
②不同点:
a)指令是在汇编是完成的,是将宏体代替宏名,所以不能节省目标程序所占的内存单元;子程序调用是由CPU完成的,即使多次调用子程序,在目标程序代码段中,子程序代码仍是一个,可节省内存空间。
b)子程序执行时,要保护断点跳转又要恢复断点,会增加程序的执行时间;宏指令不需要,因而程序执行时间短,速度快。

你可能感兴趣的:(微机&汇编)