调用DOS系统的4CH功能,返回DOS方法:在要返回DOS处,安排指令:MOV AH, 4CHINT21H执行完4CH的功能调用,即返回DOS。例codeSEGMENTASSUME CS:code:程序主体部分start:;返回DOSMOVAH, 4CH21HINTENDScodeENDstart
调用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
例一编写完整汇编语言程序,完成内存数据块传送功能将某段中的字符串“"Hello!"传送到另一段中。开始建立传送方向源串首地址DS: SI+ES:DI ←E目的串首地址CX+串长度串传送返回DOS
例一 编写完整汇编语言程序,完成内存数据块传送功能。 将某段中的字符串“Hello!”传送到另一段中。 开始 建立传送方向 DS: SI ← 源串首地址 ES: DI ←目的串首地址 CX ← 串长度 串传送 返回 DOS
;数据段1SEGMENTaa;定义源串DB 'Hello!'XXENDSaabb;数据段2SEGMENT;定义目的缓冲区DB 6 dup(?)yybbENDS;代码段SEGMENTcc;指示指令中标号,变量所在段ASSUME CS:cc, DS:aa. ES:bbCLD;设置传送方向start :MOV;DS:SI源串首地址AX,aaMOVDS, AXLEASI,XXMOV;ES:DI←目的首地址AX, SEGyyMOVES.AXMOVDI,OFFSETyyMOVCX←串的长度CX, 6REP;串传送MOVSBMOVAH, 4CH:调用4CH系统功能,返回DOSINT21HENDSccEND;指示程序结束和程序入口start
aa SEGMENT ; 数据段1 xx DB 'Hello!’ ; 定义源串 aa ENDS bb SEGMENT ;数据段2 yy DB 6 dup (?) ; 定义目的缓冲区 bb ENDS cc SEGMENT ;代码段 ASSUME CS:cc, DS:aa, ES:bb ;指示指令中标号,变量所在段 start : CLD ;设置传送方向 MOV AX , aa ;DS: SI ← 源串首地址 MOV DS , AX LEA SI , xx MOV AX , SEG yy ;ES:DI ← 目的首地址 MOV ES , AX MOV DI , OFFSET yy MOV CX , 6 ;CX ← 串的长度 REP MOVSB ;串传送 MOV AH , 4CH ;调用4CH系统功能,返回DOS INT 21H cc ENDS END start ;指示程序结束和程序入口
;编写源程序D:>EDIThello.asm;汇编源程序D:I>MASM hello;Microsoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.49860+421241Bytessymbol spacefreeOWarning Errors0 Severe Errors;连接程序hello ;D:>LINKMicrosoft (R) Overlay Linker Version 3.61Copyright (C) Microsoft Corp 1983-1987. All rights reserved.LINK : warning L4021: no stack segment警告性错误:无堆栈段;执行程序D:l>hello此错误可忽略D:I>
D:\>EDIT hello.asm ;编写源程序 D:\>MASM hello ; ;汇编源程序 Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. 49860 + 421241 Bytes symbol space free 0 Warning Errors 0 Severe Errors D:\>LINK hello ; ;连接程序 Microsoft (R) Overlay Linker Version 3.61 Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segment D:\>hello ;执行程序 D:\> 警告性错误:无堆栈段 此错误可忽略
:利用DEBUG查看结果D:l>DEBUGhellol.exe-U:查看程序代码129F:0000FCCLD129F:0001B89D12MOVAX.129DMOVDS, AX129F:00048ED8129F:00068D360000LEASI100001AX.MOV129E129F:000AB89E12MOVES,AX129F:000D8EC0DI,MOV0000129F:000FBF0000CX.MOV0006129F:0012B90600REPZ129F:0015F3129F:0016A4MOVSBMOVAH,4C129F:0017B44C21INT129F:0019CD21查看源串内容-D129D:0L20;执行程序前,129D:000048656C6C6F210000-0000000000000000Hello.......129D:00100000000000000000-0000000000000000-D129E:0L20;执行程序前,查看目的串129E:00000000000000000000-0000000000000000129E:0010FCB89D128ED88D36-0000B89E128EC0BF0
D:\>DEBUG hello1.exe ;利用DEBUG查看结果 -U ;查看程序代码 129F:0000 FC CLD 129F:0001 B89D12 MOV AX , 129D 129F:0004 8ED8 MOV DS , AX 129F:0006 8D360000 LEA SI , [ 0000 ] 129F:000A B89E12 MOV AX , 129E 129F:000D 8EC0 MOV ES , AX 129F:000F BF0000 MOV DI , 0000 129F:0012 B90600 MOV CX, 0006 129F:0015 F3 REPZ 129F:0016 A4 MOVSB 129F:0017 B44C MOV AH, 4C 129F:0019 CD21 INT 21 、 -D 129D:0 L20 ;执行程序前,查看源串内容 129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!. 129D:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 . -D 129E:0 L20 ;执行程序前,查看目的串 129E:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 . 129E:0010 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .6. -