第三节指示性语句/第四节汇编语言程序举例 程序开始和结束 二、段定义 三、变量定义 四、 ASSUME语句∥第7次课 个完整汇编程序举例 了解DOS的返回,装入功能 五、表达式及表达式中的操作符 翻汇编语言程序例一完整汇编结构 六、过程定义(第六节程序设计介绍) 七、等值定义(第六节程序设计介绍) 翻汇编语言程序例二(第六节程序设计介绍)
第三节 指示性语句 / 第四节 汇编语言程序举例 一、程序开始和结束 二、段定义 三、变量定义 四、ASSUME语句 // 第7次课 一个完整汇编程序举例 了解DOS的返回,装入功能 五、表达式及表达式中的操作符 汇编语言程序例一 完整汇编结构 六、过程定义 (第六节程序设计介绍) 七、等值定义 (第六节程序设计介绍) 汇编语言程序例二(第六节程序设计介绍)
一个完整的汇编语言程序举例
一个完整的汇编语言程序举例
第二章介绍过的程序段: 例将B寄存器的内容按二进制邢式显示出来 (BL)[10100110 3130313030313130 MOV CX. 8 ;显示字符个数为8 next: SHL BL, 1 ;将显示位移至CF中 JC one ;CF=1? MOV DL,30H;CF=0,将0的ASCI放在DL中 JMP exit one: MOV DL,31H;CF=1,将1的ASCI放在DL中 exit: MOV AH. 2 iNT 21H ;调用DOS功能显示 DEC CX ;循环次数减1 JNZ next 判断是否结束
例 将BL寄存器的内容按二进制形式显示出来 (BL) 1 0 1 0 0 1 1 0 MOV CX , 8 ;显示字符个数为8 next: SHL BL, 1 ;将显示位移至CF中 JC one ;CF=1? MOV DL , 30H ;CF=0, 将0的ASCII放在DL中 JMP exit one: MOV DL , 31H ;CF=1, 将1的ASCII放在DL中 exit: MOV AH , 2 INT 21H ;调用DOS功能显示 DEC CX ;循环次数减1 JNZ next ;判断是否结束 、、、 31 30 31 30 30 31 31 30 第二章 介绍过的程序段:
code SEgMENT ASSUME CS: code start. MOV CX. 8 ;显示字符个数为8 next: SHL BL, 1 ;将显示位移至CF中 JC one CF=1? MOV DL,30H;CF=0,将0的ASC放在DL中 JMP exit one: MOV DL,3H;CF=1,将的ASCI放在DL中 exit: MOV AH. 2 NT 21H 调用DOS功能显示 DEC CX ;循环次数减1 JNZ next 判断是否结束 code ENDS END start
code SEGMENT ASSUME CS: code start: ... ... ... ... code ENDS END start MOV CX , 8 ;显示字符个数为8 next: SHL BL , 1 ;将显示位移至CF中 JC one ;CF=1? MOV DL , 30H ;CF=0, 将0的ASCII放在DL中 JMP exit one: MOV DL , 31H ;CF=1, 将1的ASCII放在DL中 exit: MOV AH , 2 INT 21H ;调用DOS功能显示 DEC CX ;循环次数减1 JNZ next ;判断是否结束
D:>MASM SBL: Y 汇编成 ShowBL obj Microsoft (R) Macro Assembler Version 5.10 Copyright(C)Microsoft Corp 1981, 1988. All rights reserved 48912+447243 Bytes symbol space free O Warning errors 0 Severe errors D:LINK SBL: K 连接成 ShowBL. exe Microsoft(R)Overlay Linker Version 3.61 Copyright(c)Microsoft Corp 1983-1987. All rights reserved LINK: warning L4021: no stack segment D:}>SBL女 装载并执行 ShowBL. exe 请猜想执行的结果?
D:\>MASM SBL; 汇编成ShowBL.obj Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. 48912 + 447243 Bytes symbol space free 0 Warning Errors 0 Severe Errors D:\>LINK SBL; 连接成ShowBL.exe Microsoft (R) Overlay Linker Version 3.61 Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segment D:\>SBL 装载并执行ShowBL.exe 请猜想执行的结果?
D> DEBUG SBL. exe;用 DEBUG装入程序 U 0B5E:0000B90800 MOV CX,0008 OBSE: 0003 DOE3 SHL BL,1 0B5E:00057205 JB 000C 0B5E:0007B230 MOV DL 30 0B5E:0009EB03 JMP O00E hello. exe 0B5E:000B90 NOP 用户程序 0B5E:000CB231 MOV DL.31 0B5E:000EB402 MOV AH,02 0B5E:0010CD21 INT 21 0B5E:001249 DEC CX 0B5E:001375EE JNZ 0003 0B5E:001509E8 OR AX.BP 0B5E:001796 XCHG SLAX 与用户程序相连的 0B5E:001800F8 ADD AL, BH 内存内容被看作 0B5E:001AB262 MOV DL. 62 程序时 OB5E: 001C FFFF ??? DE 死机 OBSE: OOID EBOA IMP 0029
D:\>DEBUG SBL.exe ;用DEBUG装入程序 -U 0B5E:0000 B90800 MOV CX,0008 0B5E:0003 D0E3 SHL BL,1 0B5E:0005 7205 JB 000C 0B5E:0007 B230 MOV DL,30 0B5E:0009 EB03 JMP 000E 0B5E:000B 90 NOP 0B5E:000C B231 MOV DL,31 0B5E:000E B402 MOV AH,02 0B5E:0010 CD21 INT 21 0B5E:0012 49 DEC CX 0B5E:0013 75EE JNZ 0003 0B5E:0015 09E8 OR AX,BP 0B5E:0017 96 XCHG SI,AX 0B5E:0018 00F8 ADD AL,BH 0B5E:001A B262 MOV DL,62 0B5E:001C FFFF ??? DI 0B5E:001D EB0A JMP 0029 - hello.exe 用户程序 与用户程序相连的 内存内容被看作 程序时 死机
▲复习DOS系统的启动过程 磁盘 执行用户程序后, 引导程序 IO SYS 若要返回DOS状态, 内存 MSDOS. SYS DOS 即在屏幕上出现DOs提示符,B中断向量表 COMMAND. COM 等待输入新的命令, 2)引导程序 EDITEXE MASM.EXE 其他 应在用户程序的最后安排 IO.SYS模块 LINK. EXE 系统 MSDOS.SYS模块 DEBUG. exe 程序 完成此功能的程序段。 3) COMMAND. COM RAM 4)/用户程序 空间 he elo. asm 应 通常采用调用 hello. ob j 用 DOS系统功能完成。 hello. exe 程 ROM BIOS ROM 序 FF:00系统检测程序
▲复习DOS系统的启动过程 执行用户程序后, 若要返回 DOS状态, 即在屏幕上出现 DOS提示符, 等待输入新的命令, 应在用户程序的最后安排 完成此功能的程序段。 FFFF:0000H 1 2 4 3 ? ROM 系统检测程序 IO.SYS 模块 COMMAND.COM MSDOS.SYS 模块 用户程序 空 间 引导程序 1KB 中断向量表 RAM 内 存 ROM BIOS DOS IO.SYS COMMAND.COM MSDOS.SYS 引导程序 磁 盘 EDIT.EXE MASM.EXE LINK.EXE DEBUG.exe 应 用 程 序 其他 系统 程序 hello.asm hello.obj hello.exe 通常采用调用 DOS 系统功能完成
调用DOS系统的4CH功能,返回DOS 方法:在要返回DOS处,安排指令: MOV AH. 4CH INT 21H 执行完4CH的功能调用,即返回DOS。 例 code SEgment ASSUME CS: code start:、 程序主体部分 MOV AH,4CH;返回DOS NT 21H code ENDs END start
调用DOS系统的4CH 功能, 返回DOS 方法: 在要返回DOS 处,安排指令: MOV AH, 4CH INT 21H 执行完4CH的功能调用,即返回DOS 。 例 code SEGMENT ASSUME CS: code start: 、、、 ;程序主体部分 、、、 、、、 MOV AH, 4CH ;返回DOS INT 21H code ENDS END start
code SEGMENT ASSUME CS: code start: MOV BL 53H ;设置一个测试53h MOV CX. 8 显示字符个数为8 next: SHL BL 1 将显示位移至CF中 JC one ;CF=1 MOV DL,30H;CF=0,将0的ASCI放在DL中 JMP exit one: MOV DL. 31H CF=1,将1的ASCI放在DL中 exit: MOV AH. 2 iNt 21H ;调用DOS功能显示 DEC CX 循环次数减1 JNZ next 判断是否结束 MOV AH,4CH;返回DOS NT 21H code ends END start
code SEGMENT ASSUME CS: code start: ... ... ... ... MOV AH, 4CH ;返回DOS INT 21H code ENDS END start MOV CX , 8 ;显示字符个数为8 next: SHL BL , 1 ;将显示位移至CF中 JC one ;CF=1? MOV DL , 30H ;CF=0, 将0的ASCII放在DL中 JMP exit one: MOV DL , 31H ;CF=1, 将1的ASCII放在DL中 exit: MOV AH , 2 INT 21H ;调用DOS功能显示 DEC CX ;循环次数减1 JNZ next ;判断是否结束 MOV BL, 53H ;设置一个测试53h
Microsoft(R) Macro Assembler Version 5.1 vBI D:2 >MASM ShOWBL: 汇编成Sho BL ob Copyright(C)Microsoft Corp 1981, 1988. All rights reserved. 48912+ 447243 Bytes symbol space free 0 Warning errors 0 Severe errors D: LinK ShowBL: 连接成 ShowBL. exe Microsoft(r)overlay Linker Version 3.61 Copyright(c) microsoft Corp 1983-1987. All rights reserved. LINK: warning L4021: no stack segment D: > ShOWBL 装载并执行 ShowBL. exe 01010011 D: masm>
D:\>MASM ShowBL; 汇编成ShowBL.obj Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. 48912 + 447243 Bytes symbol space free 0 Warning Errors 0 Severe Errors D:\>LINK ShowBL; 连接成ShowBL.exe Microsoft (R) Overlay Linker Version 3.61 Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segment D:\>ShowBL 装载并执行ShowBL.exe 01010011 D:\masm>