1、及,秦红磊,金天 2004.02,微机原理,接口技术,第四章 汇编语言(Assembly Language),第一节.程序设计语言与汇编语言 第二节.汇编语言伪指令 第二节.汇编程序编辑、汇编与链接程序 第四节.汇编语言程序设计,计算机程序设计语言,机器语言、汇编语言和高级语言,高级语言(High Level Language): 通用,一般不要求了解结构原理。易读,易编写,调试,简洁 BASIC,.,VC(+)/VB/DELPHI,JAVA,C#,HTML=机器语言(执行)-翻译/编译 解释程序(Interpreter)/编译程序(Compiler) (编译原理) C+编译真实指令 JAVA
2、编译 Java bytecode中间代码虚拟机指令JAVA解释器,第一节 程序设计语言汇编语言,程序设计语言与汇编语言,汇编语言(Assembly Language)-面向具体机器(CPU)语言 ,最接近于机器语言的低级语言。借助于助记符编程,地址数据可符号化(可读性提高),编写、修改较方便。完整的语法,不易出错。例:ADD AX,100 (05 64 00) JMP 1000:2000 (EA 00 20 00 10) 特点:汇编语言程序-机器代码一一对应,程序流可控,速度快,用于编制系统程序、实时通信/控制/处理。-面向具体机器(CPU)语言,移植性差,不通用。 汇编(Assemble)源
3、程序代码机器语言代码(目标程序)的过程。功能:语法检查、翻译。汇编程序Assembler机器汇编(人工汇编)。交叉汇编借助其它机器(如PC)汇编。 反汇编(Dis-Assemble) 机器语言代码指令代码(源程序) ,逆向工程Reverse Engineering),机器语言 二进制表示的指令和数据序列目标代码,汇编程序获取(1)机器码Disassemble Sourcer /debuger (2)C ASM CL /Fa开关; TCC -B ;(3)ASM 编程 (高级语言嵌入小汇编程序模块)MASM TASM ASM; 汇编程序(MS-MASM 4.0/5.0 6.11/6.14/6.15
4、) ASM86(小,无宏MICRO支持) TASM5.0) 汇编程序用途,程序设计语言与汇编语言,DATA SEGMENT ;定义数据段DATA1 DB 0F8H,60H, 0ACH,74H,3BH;被加数DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数DATA ENDS;数据段结束CODE SEGMENT;定义代码段ASSUME CS:CODE,DS:DATA;告诉汇编程序段范围START: MOV AX,DATAMOV DS,AX ;初始化DSMOV CX,5 ;循环次数送CXMOV SI,0 ;置SI初值为零,汇编语言源程序格式(例1),段名,段说明保留字,标号,CLC
5、 ; 清CF标志 LOOPER:MOV AL,DATA2SI;取一个字节加数ADC DATA1SI,AL;与被加数相加INC SI ;SI加1指向下一字节DEC CX ;计数器CX减1JNZ LOOPER ;不等于零,转LOOPER(HLT) ;停止-实际?(INT21H)CODE ENDS ;代码段结束END START;源程序结束,指定起始地址标号,汇编语言源程序格式(例2),(PC台式计算机在MS-DOS环境下的标准程序格式) MAIN PROC FAR ;MS-DOS 模板语句PUSH DSXOR AX,AX ;=MOV AX,0PUSH AX ;保存返回指针 START:MOV AX
6、,DATAMOV DS,AX :RET ;返回原DS:0000HMS-DOS MAIN ENDP,汇编语言源程序格式,分段结构 指定堆栈、数据、代码段 -SEGMENT-ENDS-(END结束?) ?当前物理段(SS/CS/DS/ES)-运行/逻辑段编程程序语句的类型和组成 基本单元:语句指令性语句-CPU指令/指示性语句-伪操作(汇编辅助信息) 语句构成:name Opcode/伪操作 操作数 ;注释 LOOP1:.(指令)/ DATA1 DB.( 伪操作),汇编语言源程序格式,程序语句表面上组成 保留字(Reserved Words) SEGMENT ENDS OFFSET SIZE DB
7、 DW DDMOV PUSH ADD SUB MUL DIV INC DECLOOP PROC ENDP CALL RET END 标识符(Identifiers字母+字母/数字/_,32个) 界符(Delimiters分隔两部分) 空格 :, 常数(Const.s) 1000H 11101000B 0ABCDH 注释(Comments) ;分号后 大段语句: .Comment / ,汇编语言源程序格式,标号(Label) xxxx: 指令的符号地址(可浮动)段、偏移量、类型(NEAR)/FAR) 变量名/段名/过程名-指示性语句(可浮动)-无冒号;-有规定-段、偏移量、类型(操作数)(BYT
8、E/WORD/DWORD/QWORD/TBYTE(10)) 字节 字 双字 四字 十字节,段 过程 变量,标记名称,第二节 汇编语言数据和表达式,助记符和伪操作 (Mnemonic & Pseudo Operation)指令助记符 MOV,ADD,.指示性操作 DB,DW,SEGMENT,ENDS,ASSUME,END操作数(Operand)单/双/无,逗号隔开-常数/寄存器/标号/变量/表达式(1)常数:xxxxD/B/H/O(Q),ASCII(A01)浮点数十进制(实数100.2,1.33E-8)浮点数十六进制(实数10A4FE87R-8短实/16位HEX长实/临实20位),源程序格式 操
9、作数,(2)寄存器 8位: AL/AH, BH/BL, CH,CL,DH,DL16位:AX/BX/CX/DX,SI/DI/BP/SP/ D/ES/CS (3)标号 (少用绝对地址,多用标号-维护,移植) (4)变量 内存数据区名, 类型 B/W/DW/QW/TB (5)表达式 (预编译/汇编处理)算术运算符 + - * / MOD (变量地址+/-)逻辑运算符 (位)AND/OR/XOR/NOTAND AL,100001BAND AL, 100001B AND 1111101B,源程序格式 操作数,关系运算符关系运算符有:EQ(等于),NE(不等),LT(小于),GT(大于),LE(小于或等于
10、),GE(大于或等于)等。参与关系运算的必须是两个数值,或同一段中的两个存储单元地址,但运算结果只可能是两个特定的数值之一:当关系不成立(假)时,结果为0;当关系成立(真)时,结果为0FFFFH。例如,MOV AX,4 EQ 3;关系不成立,故(AX)0 MOV AX,4 NE 3;关系成立,故(AX)0FFFFH,源程序格式 操作数,分析运算符和合成运算符分析运算符 用以分析提取一个存储器操作数的属性,如段、偏移量或类型等。 OFFSET、SEG、TYPE、SIZE、LENGTH; 合成运算符 可规定存储器操作数的某个属性,例如类型。PTR、THIS、SHORT (类似类型强制转换)INC
11、WORD PTR BX ADD BYTE PTR 1000H, 38H,源程序格式 操作数,OFFSET 可以得到一个标号或变量的偏移地址(定位后已知) MOV SI,OFFSET DATA1 LEA SI, DATAl LEA SI, DATA1BX+100 SEG 可以得到一个标号或变量的段值MOV AX,SEG ARRAYMOV DS,AX TYPE 结果=类型数值(与存储器操作数类型属性的对应)BYTE1;WORD2; DW4;NEAR1;FAR2n DUP(?)=?,源程序格式 操作数,分析运算符 TYPE VAR DW ?;变量VAR的类型为字 2 ARRAY DD 10 DUP(
12、?);变量ARRAY的类型为双字:type ARRAY= 4 STR DB This is a test;变量STR的类型为字节 1:MOV AX,TYPE VAR; (AX)2 MOV BX,TYPE ARRAY;(BX)4 MOV CX,TYPE STR; (CX) 1,源程序格式 操作数,分析运算符 LENGTH/ SIZE LENGTH 一个变量DUP定义的变量总数非DUP则=1 (LENGTH ARRAY=10) SIZE 一个变量第一个DUP定义的字节总数(变量TYPE*LENGTH)非DUP则=TYPE 例 V1 DB 20 DUP(?)V2 DD 4000H SIZE V120
13、 SIZE V2=4,源程序格式 操作数,合成运算符号 PTR/THIS/HIGH/LOW/$ PTR (强制)指定MEM操作数类型,不明或强制MOV AX,BX-INC BYTE/WORD PTR BX THIS(同C中UNION联合体)同一变量区,可按不同类型访问(BYTE/WORD/DWORD)V1W EQU THIS WORDV1B DB 10 DUP(?)MOV AX,(WORD PTR) V1B ;强制转换(否则Warning或Error) SHORT 127/+128 短标号 JMP SHORT SLABLE $ (当前指令地址),源程序格式 符号定义,名字 EQU 表达式(全局
14、,唯一,不可换,汇编替换)COUNT EQU 2000 名字 = 表达式 COUNT=2000 名字 LABEL 类型(Byte,Word,Double Word,STRUC,RECORD,NEAR,FAR),源程序格式 数据定义,STRUC 自定义多字段组成的数据类型。(同C中struct)-定义结构类型变量名 结构名 定义结构变量VS1 S1; VS1.V1,结构名 STRUC: : 结构名 ENDS,例 S1 STRUCV1 DB ?V2 DW ? S1 ENDS,运算关系顺序 (1) LENGTH,SIZE,WIDTH,MASK,(), (2)(结构成员)(3) (段超越)(4) PT
15、R,OFFSET,SEG,TYPE,THIS(6) +,-(7)*/MOD(8) SHL,SHR(9) EQ,NE,LT,LE,GT,GE(10) NOT (11)AND (12)OR,XOR (13) SHORT (最低),源程序格式 伪操作命令,汇编程序的命令(定义、分配管理)(-=CPU指令一种操作)处理器方式/数据/符号/段/过程/模块与链接定义宏处理/条件/列表/其他微操作处理器方式定义(.8086).286(C,P) .586 .MMX.386(C,P) .686 (P) .K3D.8087 .80287, .80387配对,源程序格式 段定义,SEGMENT / ENDS 逻辑段
16、存储定位关系SEGMENT 定位类型,组合类型,类别 PARA (节Paragraph,16字节)BYTE (任意)WORD (偶数地址)PAGE (页,256字节)四种定位类型:确定段的边界定位,段1,段2,段3,源程序格式 段定义,SEGMENT / ENDS NAME SEGMENT 定位类型,组合类型,类别 NONE 不组合PUBLIC 多个模块相同段名装配合一STACK 堆栈,同Public( 相同段名装配合一)EXE文件装入时SP初值=末指针+1(栈底)COMMON 公用 不同程序遇到同名时同一地址装入,覆盖重叠 临时变量,以最长为界PRIVATE: 表示本段与其他段组合无关,SE
17、GMENT / ENDS SEGMENT 定位类型,组合类型,类别,源程序格式 段定义,X,.CODE .DATA .STACK,源程序格式 ASSUME 说明,ASSUME 段寄存器:段名,段寄存器:段名该指令用于通知汇编程序,CS、SS、DS、ES将被设定为那些段的段基址寄存器,从而在汇编时能够知道,语句中引用的变量或标号是通过那个寄存器进行访问的。ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:EXTRS,源程序格式 过程定义,过程名 PROC (NEAR)/FAR:RET ;(自动RETF/RET)过程名 ENDP结构化子程序(SUBROUTINE)引用:C
18、ALL 过程名,(堆栈使用),MYPROC PROC:RET MYPROC ENDP CALL MYPROC;,STACK1 SEGMENT PARA STACKDB 512 dup(?) ;定义堆栈段STACK1 512字节 STACK1 ENDS DATA SEGMENT ;定义数据段DATAMESSAGE DB This A Sample Program,LFCR$ DB 0DH,0AH,$AnyDATA DW 100,DATA ENDS ;数据段DATA结束CODE SEGMENT ;定义代码段CODEASSUME CS:CODE,DS:DATA; 说明汇编程序活动段范围,汇编语言源程
19、序格式,段名,.286,汇编语言例程,MAIN PROC FAR ;MS-DOS 模板语句 START: PUSH DSXOR AX,AXPUSH AX ;保存返回指针 DS:0 START1: MOV AX,DATAMOV DS,AX LEA BX,MESSAGE LOOP1: CMP BYTE PTR BX,$ ; 24HJZ NEXT ;是结束符CALL PRINT_A CHAR ;输出该字符 INC BXJMP SHORT LOOP1 ; 继续,NEXT: RET ;返回OS MAIN ENDPPRINT_A_CHAR PROCMOV AH,5MOV DL,BX ;子程序,NEARIN
20、T 21HRET PRINT_A_CHAR ENDP. CODE ENDSEND START ;汇编结束,运行从START开始,伪操作命令例1,BV1 DB 30, 20H, 111110B BV2 DB 3 DUP(?) ;DB ?,?,? BV3 DB This is a example BV4 DB WV1 DW BV1,BV2,BV3 ;近指针变量 WV2 DD BV4, ;远指针变量 DWV1 DD WV1,WV2, ;指针的指针变量 DP1 DD PRC1,PRC2 ;PRC1,PRC2为过程名 BV2L EQU BV4-BV3MOV BX,WV1+4MOV AL, BX ; AL
21、=?JMP FAR PTR DP1+4; ;执行?,MYDATA SEGMENT AT 8A00H BV1 DB 30,20H,111110B BV2 DB 3 DUP(20H);DB ?,? BV3 DB This is a example$ BV4 DB It is a Problem$ WV1 DW BV1,BV2,BV3 WV2 DW BV4 DWV1 DD WV1,WV2 DW2 DD MYDATA ENDS BV2的地址=? DW2的地址=?,8A00:0003H,8A00:003AH,;- 0000 ;- 0003H ;- 0006H ;- 0008H ;- 001AH ;- 0
22、02AH ;- 0030H ;- 0032H ;- 003AH,伪操作命令例1分析,CODE SEGMENT PRC1 PROC FAR ;8B00:0000 : PRC1 ENDP PRC2 PROC FAR ;8B00:2C20 : PRC2 ENDP DP1 DD PRC1,PRC2 ;8B00:3000 ;DP1 内容=? ASSUME CS:CODE, DS:DATA JMP FAR PTR DP1+4; 目标地址=? =,伪操作命令例2分析,00,00,00,8B,20,2C,00,8B,8B00:2C20,JMP FAR PTR CS:3004H,源程序格式 条件汇编(概念),同
23、IFDEF /ENDIF IF condition指令组(ELSE)指令组 ENDF,!重要表示法ORG 2000H;起始偏移地址.LIST/.XLIST-列表有效/无效JMP $ 当前行(指令)DW $-V2 (例),汇编程序(二),第三节 编辑、汇编与链接程序,编辑器(Editor) 程序设计汇编器(Assembler) 汇编语言(与机器有关)MASM/ASM/TASM 链接器(Linker) 待装配的BIN指令代码可执行BIN指令代码,(.OBJ, .LIB, etc ),( XXXX.EXE ,(.DLL), ),DOS操作系统,EDIT,DEBUG,I/O驱动程序,.ASM源程序文件
24、,.OBJ程序文件,.EXE程序文件,调试、执行程序,汇编程序,连接程序,连接程序,.LST可打印文件,.LIB库程序文件,.MAP文件,其他.OBJ文件,命令,程序,0000:03FF,环境与代码运行,FFFF:0,堆栈段,数据段,代码段,CS:IP,DS,SS:SP,系统起始运行程序,中断向量区 (系统专用),栈底,最多4个活动段,分段结构,ES,汇编语言上机过程、上机环境,硬件,系统软件,应用软件,操作系统:DOS系统编辑器: EDIT.exe编程序: MASM.exe连接程序:LINK.exe调试程序:DEBUG.exe,用户开发的程序:ABC.exe等,CPU、存储器(ROM、RAM
25、)、I/O接口、输入、输出设备,通常,汇编程序对源程序的汇编是通过两次扫描源程序的方法来实现的。这样的汇编程序称为第二次扫描的汇编程序。第一次扫描将源程序中所用各标识符的位置来确定下来,第二次扫描产生机器代码。,第一次扫描,第二次扫描,符号表,机器语言,伪指令表,位置计数器,汇编语言和PCDOS的接口,如果要在微机上运行汇编语言程序,通常应在PCDOS操纵和控制下运行,也就是说应在PCDOS环境下运行程序。当通过键盘键入的源程序经汇编和连接生成可执行的程序文件并欲执行该程序时,PCDOS将按如下步骤操作; 1)为该程序建立一个长度为256字节的程序前缀区PSP,以便存放所要执行程序的有关信息,
26、并为程序和PCDOS间提供一个接口。2)把要执行的程序从磁盘上装入到内存中并为其定位。3)设置段寄存器的值,使DS及ES指向PSP的段基值。4)开始执行程序。,判断程序质量的标准程序的正确性程序的可读性程序的执行时间程序所占内存大小,第四节 汇编语言程序设计,编写汇编语言程序步骤分析实际问题,抽象描述问题的模型确定解决模型的算法按算法画出程序流程图按流程图编写程序上机调试, 运行程序,顺序结构,汇编语言程序设计顺序结构,MOV AX,100 MOV BX,200 MOV CX,8000 ADD BX, CX CMP BX,1000 JZ NEXT,汇编语言程序设计分支结构,CMP AL,100
27、JZ NEXTMOV CX,2000 NEXT: MOV CX,3000,CMP AL,100JZ NEXT1JMP N100 NEXT1: MOV CX,3000NEXT:,基本结构 (单任务):顺序、分支、循环,汇编语言程序设计分支结构,基本结构 (单任务):顺序、分支、循环,条件:数据比较结果 散转:程序入口表,程序流变化,汇编语言程序设计循环结构,基本结构 (单任务):顺序、分支、循环,N,结束循环?,Y,计数循环 条件循环,for(i=0;i100;i+) do while() while () do ,汇编语言程序设计结构,过程(子程序)反复使用程序段,简化设计、减少程序空间开销、
28、易读、易维护调试。-函数, 方法ENTRY/ EXIT/USED 指明传递和保护(变量/寄存器) 问题 保护现场/恢复现场(主程序(调用者)/子程序均可);,主程序(调用者)完成 PUSH AXPUSH BXCALL SUBRT;(不保护) POP BXPOP AX. SUBRT PROC,子程序完成 SUNRT: PUSH AX PUSH BXPOP BXPOP AXRET,顺序程序举例,计算f(x)=5x3+4x2-3x+12=(5x+4)*x-3)*x+12 计算f(6) FXCALC PROC; ENTRY X=x,EXIT=f(x);Used:AX, DXMOV AX,5MUL XA
29、DD AX,4 ;MUL X ;()SUB AX,3 ;()MUL XADD AX,12 MOV RESULT,AXRET FXCALC ENDP ;?传递方式 : X DW 6; MOV X,6 存储变量传递参数,调用: MOV X,6 ;CALL FXCALC,分支:比较测试结构,跳转结构,根据X0 给Y赋值-1,0,1MOV AL, XXMOV AH, 1CMP AL, 0JG EXIT ;X0, AH=1JZ ZEROMOV AH, -1 ;0JMP EXIT ZERO: MOV AH, AL; 0 EXIT: MOV Y,AH,分支:比较测试结构(最大值w),MOV BX, OFFS
30、ET CMPDATMOV CX,COUNTMOV AX,BXINC BXINC BX CHECK0: CMP AX,BXJNC CHECK1MOV AX,BX CHECK1:INC BXINC BXLOOP CHECK0 EXIT:,分支表(跳转结构)-散转,表内:入口地址:SUB0-L/H,SUB1-L/H,.表内无条件转移指令 JMP SUB0,JMP SUB1,. 按INDEX序号跳转到相应子程序DSEG SEGEMNTTABLE DW SUB0,SUB1,SUB2,SUB3,SUB4INDEX DW ?RESULT DW ?X DW 2102.MOV AX, DSEG ;SEG TAB
31、LEMOV DS,AX,MOV BX,OFFSET TABLEMOV SI,INDEXJMP WORD PTR BX+SI ; 转不同分支,SUB2: MOV AX,100MOV RESULT,AXRET,SUB1: MOV AX,XSAR AX,1 MOV RESULT,AXRET,SUB0: MOV AX, X ; ;不同分支程序SHL,AX,1 ;X*2MOV RESULT,AXRET,循环结构,条件控制法先判断后工作while .do; MOV CX,0; CHECK:CMP CX,100;JNC FINISH; INC CX,JMP CHECK; FINISH:,先工作后判断条件 d
32、o ( )while MOV CX,0; CHECK:.INC CX;CMP CX,100,JC CHECK; FINISH:,DELAY: MOV CX,1000 ; ; PUSH CX, ; PUSH DX, ; MOV CX,1000 DELAY1: MOV DX,50000 ;延时xx ms DELAY2: NOPNOPDEC DXJNZ DELAY2DEC CXJNZ DELAY1RET ; POP DX ; POP CX ; RET,条件 数值大小;符号 地址指针;计数法;计数值累加;递减;多重循环:延时程序例,循环结构子程序调用,(1) PUSH CX; PUSH DX; CAL
33、L DEALY POP DX;POP CX(2) PUSH CXMOV CX,2000; CALL DEALY1POP CX(3)子程序现场保护调用者(Caller)/子程序保护;,(三),汇编语言程序-分块传送,DATA SEGMENT STRG DB 256 DUP(1,2,3) STG1 EQU STRG+7 STG2 EQU STRG+27 STRSE EQU 50 ;串长 DATA ENDS SSTACK SEGMENT STACKDB 256 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MAIN: .
34、MOV AX,DATAMOV DS,AX,MS-DOS程序,MOV ES,AXMOV CX,STRSE;MOV SI,OFFSET STG1; 源串首址MOV DI,OFFSET STG2;目标首址CLD ;增量方式PUSH SI ADD SI,STRSE-1 ;SI=源串末址CMP SI,DIPOP SIJL OK ;不重叠STD ;重叠,按减量ADD SI,STRSE-1 ;指向串末ADD DI,STRSE-1 OK: REP MOVSB,STAG1,STAG2,STRSE,STAG1+STRSE,MOV AX,4C00H ;返回DOSINT 21H CODE ENDSEND MAIN,数
35、据块传送:一般情况,程序举例 分块传送(通用子程序),通用子程序结构 功能=串移动 ENTRY: DS:SI=源串首址 ES:DI=目标首址 CX=串长 考虑物理地址关系,数据块传送:一般情况,BLKMOV PROCPUSH DSPUSH ESPUSH AXPUSH BXPUSH DXPUSH CXMOV AX,SIMOV CL,4SAR AX,CL ;右移4位MOV DX,DSADD AX,DSMOV DS,AXAND SI,0FH,MOV BX,DISAR BX,CL ;右移4位MOV DX,ESADD BX,DXMOV ES,BXAND DI,0FHCMP AX,BX ;比较SRC/DS
36、T起始地址高位JA MOVDOWN;从低往高JB MOVUPCMP SI,DI;高位相等,比低位JA MOVUPJB MOVDOWN,POP CX ;相等,不移动JMP MOVEXIT MOVUP: STDPOP CXMOV AX,CXDEC AXADD SI,AXADD DI,AXJMP DOMOV MOVDOWN: CLDPOP CX DOMOV: REP MOVSB MOVEXIT: POP . ;?子程序保护RET BLKMOV ENDP,多重循环:例软件延时(nT,T=210ns) SOFTDLY PROCMOV BL,10 ; 4T DELAY0: MOV CX,2801; 4T
37、DELAY1: LOOP DELAY1; 17T/5TDEC BL ;3TJNZ DELAY0 ;16T/4TRET ;20T SOFTDLY ENDP n=4+10*(4+2801*17-12)+3+16)-12 +20 10ms,内循环,程序设计举例-循环软件延时,DAINDEX DB 0;? 波形发生 DOTNUM DB DATIME-$-1 DAVALUE DB 0,40H,80H,0C0HDB 255,0C0H,80H,40H;三角波 DATIME DW 100 DACTRL PROC FARPUSH DSPUSH 0000MOV AX,SEG DAVALUEMOV DS,AXMOV
38、 CL,DOTNUMLEA SI,DAVALUEINC SI,程序设计举例-查表波形发生,MOV DAINDEX,0 DALOOP: MOV AL, DAINDEXCMP AL, DOTNUMJC DACYCLEXOR AL, AL MOV DAINDEX, AL; 复位计数 DACYCLE: CALL DAOUTINC SIINC DAINDEXCALL DELAYCALL KBINPUT ;读键盘CMP AL,1BH; ESC键按下,结束JNZ DALOOPRETDACTRL ENDP,DAOUT PROC; 查表输出LEA SI,DAVLUEXOR AH,AHADD SI,AXMOV A
39、L,SIMOV DX, DAPORT; DAC端口OUT DX,ALRET DAOUT ENDP,程序设计举例-模块化: 过程/子程序调用与参数传递,术语嵌套 递归 可重入 可重定位 参数传递 、寄存器 、数据单元变量(内存,含指针变量)(全局) 、堆栈,START: MOV AX,DATAMOV DS, AXLEA BX,ARRAYPUSH BXLEA BX,COUNTPUSH BXLEA BX,SUMPUSH BXCALL PRO_ADD: ;ADD SP,6,OFFSET ARRAY,OFFSET COUNT,OFFSET SUM,断点CS,断点IP,调用后SP,运行前SP,堆栈段,PR
40、O_ADD PROC FARPUSH AXPUSH BXPUSH CXPUSH BPMOV BP, SPMOV BX, BP+14;MOV CX, BX ;countMOV BX,BP+12; SUM指针MOV BX,BP+16 MOV AX,0,断点AX,断点CX,断点BX,断点BP,+8,LP: ADD AX,SIINC SIINC SILOOP LPMOV BX, AXPOP BPPOP CXPOP BXPOP AXRET 6,断点AX,断点CX,断点BX,断点BP,+8,汇编程序输入输出BIOS/DOS,概念和使用 DOS和BIOS调用 (Disk OS-Basic I&O syste
41、m) 两组系统服务程序OS与MS-DOS, MS-DOS OS:处理机/存储/文件/设备/作业管理-资源管理 硬件裸机:BIOS-DOS-高级语言。硬件控制:直接IO-BIOS-DOS-高级语言。 移植性:直接IOBIOSDOS 高级语言。 关键:DOS与设备无关-BIOS与设备相关 应用: 系统功能调用-软中断 PCMS-DOS-BIOS INT XXH,. 系统功能 86PC:4种中断:NMI, INTR, 内部中断、软中断向量中断技术 0-3FFH 中断向量表 0255中断号对应中断例程入口 INT n INT 10H1FH ROM-BIOS I/O控制程序 物理地址0F000起始 IN
42、T 203FH DOS中断 INT 40HFFH自由中断区 P449-458附录3.2和3.3,读键盘(阻塞) (非阻塞) MOV AH,1 KBSCAN: MOV AH, 0BH INT 21H INT 21H CMP AL,Y CMP AL,0FFHJZ KBINPUT;其他例行处理操作; JMP KBSCANKBINPUT:MOV AH,1BOIS调用: MOV AH,0 MOV AH,1 INT 16H INT 16H,显示字符:(DOS仅字符方式) MOV AH,2 MOV DL,A ;07 BellINT 21H; C可退出 特点:(MS-DOS) (1)不用 CALL (2)软中断INT n (3)用户程序不必与服务程序代码相连向量(同一般OS:代码简洁、可读性好,调试、使用方便) =基础CP/M-DOS /BIOS,。 (4)BIOS-ROM固化。,