第四章 汇编语言程序设计
这章就是写写代码什么的了
一、汇编语言程序结构
.486 ;处理器选择伪指令
DATA SEGMENT USE16 ;段定义伪指令,定义数据段
...
DATA ENDS
CODE SEGMENT USE16 ;段定义伪指令,定义代码段
ASSUME CS:CODE,DS:DATA;段约定伪指令
BEGIN:
MOV AX,DATA
MOV DS,AX ;DS初始化
...
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END BEGIN ;汇编结束伪指令
1.处理器选择伪指令
就.486 .386嗯嗯,至少要用.386
2.段定义伪指令 ( SEGMENT ENDS为定界语句)
定位参数、链接参数、‘分类名’ 只在模块化程序中需要考虑。
对于我们学习的单一模块的程序,当需要定义堆栈段时,链接属性STACK,分类名‘STACK'
段名:通常用STACK作为堆栈段的段名,DATA作为数据段的段名,CODE作为代码段的段名
3.段约定伪指令
ASSUME指令,要求放在代码段之中
通知汇编程序,CODE是代码段,对代码段寻址约定使用DS寄存器
对数据段寻址约定使用DS寄存器
4.汇编结束伪指令
END 程序启动指令标号
汇编程序对END之后额语句将不再进行任何处理。DOS装载程序的可执行文件是,自动把标号所在段的段基址赋给CS,把标号所在单元的偏移地址赋给IP
5.DOS的返回
程序完成预定任务之后,必须返回DOS
MOV AH,4CH
INT 21H
二、汇编源程序的编程格式
(1)exe文件
exe文件允许使用多个逻辑段,每个逻辑段不超过64KB,适合编写大型程序。(照应实模式的特点)
(2)com文件
com文件只允许使用一个逻辑段,即代码段。程序所使用的数据,可以集中设置在代码段的开始或末尾。需要使用ORG定位伪指令将程序的启动指令存放在代码段偏移地址为100H的单元。
ORG指令用于通知汇编程序,将下一条指令或数据存放在表达式给出的段内其实偏移地址。
DATA SEGMENT AT 0040H
ORG 0017H
KEYFLAG DB ?
DATA ENDS
定义了KEYFLAG变量,存放在段基址为40H,偏移地址为0017H的内存单元中。
.586
CODE SEGMENT USE16
ASSUME CS:CODE
ORG 100H ;启动指令BEG存放在代码段偏移地址为100H
BEG:
JUMP START
SUM DB ? ;变量集中设置在代码段的开始或末尾
START:
MOV AL,46H
ADD AL,52H
MOV SUM,AL
MOV AH,4CH
INT 21H
CODE ENDS
END BEG
三、DOS功能调用
1、调用模式:
MOV AH,功能号
如果有入口参数,设置入口参数
INT 21H
如果有出口参数,分析出口情况
2、功能号
只能看着背呗。
先说入口、出口参数
入口DL、DX出口AL(入口DD出口A)
字符串都是DX
然后开始自己编顺口溜:
1读字符2显示;9显字串输入A;(09H是显示字符串,0AH键盘输入字符串,从BUF+2单元开始存放)
7、8全都不回显,前否后是ctrl_c;(前面的7不响应ctrl_C,后面的8响应0)
4CH回DOS,int 21作终结。(返回DOS的操作系统)
emmm,还是很押韵的。编着编着,就记下来了。。。
这里对0AH功能号,要重点掌握。
四、BIOS功能调用
键盘16屏幕10
键盘00读字符,
键盘01查缓冲。(Z=0有输入)
屏幕00设屏显,
0E、AL字符显(如果是DOS的21H,入口参数就是DL)
13显示字符串。
五、程序设计
1、子程序程序设计
子程序定界PROC ENDP
CALL指令调用 RET返回
2、宏指令程序设计
宏指令定界 MACRO ENDM
然后,修行靠个人叭。。。剩下的就是编写程序。
我也要开始练程序了,窒息。