汇编语言-DOS功能调用

合集下载

int 21h汇编语言

int 21h汇编语言

int 21h汇编语言
int 21h 是8086汇编语言中的一条指令,用于调用DOS的功能服务。

其功能和参数由AH(高8位寄存器)和AL(低8位
寄存器)指定。

int 21h的使用方法如下:
```
mov ah, 功能代码
mov dl, 参数
int 21h
```
其中,功能代码(Function Code)是指要调用的DOS功能服
务的编号,根据不同的功能服务,有不同的功能代码。

参数(Argument)是指传递给DOS功能服务的附加参数。

示例:
```
; 用int 21h调用DOS功能服务来显示一个字符
mov ah, 02h ; 功能代码02h表示显示字符
mov dl, 'A' ; 要显示的字符是'A'
int 21h
```
上述示例中,mov ah, 02h表示要调用DOS的02h号功能服务,即显示字符。

mov dl, 'A'将要显示的字符'A'存放在dl寄存器中。

最后一句int 21h,则代表调用DOS功能服务来显示字符。

总之,int 21h是汇编语言中调用DOS功能服务的常用指令,通过它可以实现一系列与DOS相关的操作,比如读写文件、显示字符和字符串等。

汇编语言程序设计

汇编语言程序设计

6)组合运算符(属性修改运算符) ① PTR运算符:运算符PTR可以指定或修改存储器操作数的 类型。注意,这种修改是临时性的,仅在该语句内有效。 下面是使用PTR运算符的例子: 例10 INC BYTE PTR[BX] 该语句的目的操作数是内存单元,用寄存器作为地址指 针。如果仅仅使用[BX]来表示该操作数,则汇编该语句时 ,不能确定该存储单元是字节单元还是字单元。因此,必 须使用BYTE PTR说明它为字节操作数(若为字操作数, 则使用WORD PTR说明)。
4)分析运算符:分析运算符有:SEG、OFFSET、TYPE、 LENGTH和SIZE。 ① SEG运算符:利用SEG运算符可以得到一个标号或变量的段 基值。下面的指令将ARRAY的段基值送给DS寄存器。 例4 MOV AX,SEG ARRAY MOV DS,AX ② OFFSET运算符:利用OFFSET运算符可以得到一个标号或 变量的偏移量。下面的指令将STRING的偏移地址送给DX。 例5 MOV DX,OFFSET STRING ③ TYPE运算符:运算符TYPE的运算结果是一个数值,这个数 值与操作数类型的对应关系见表4-1。
4.1.3
汇编语言的表达式
(3)表达式。表达式是操作数常见的形式,它由常数、变量 、标号通过操作运算符连接而成。 汇编语言中有:算术运算符、逻辑运算符和关系运算符等 。 1)算术运算符:常用的有:+(加)、–(减)、*(乘)、/ (除)和MOD(模运算)等,算术运算的结果是一个数值 。 例1 MOV AX,VARX+2 表示VARX的地址加2后对应的存储字单元内容送给AX。 2)逻辑运算符:AND(逻辑“与”)、OR(逻辑“或”) 、NOT(逻辑“非”)和XOR(逻辑“异或”)。逻辑运算 用于数值表达式中对数值进行按位逻辑运算,并得到一个数 值结果。 例2 MOV AL,0FH AND 35H 表示将0FH与35H按位相与后得到05H送给AL, 这条指令 与MOV AL, 05H 等效。

汇编语言第5次实验报告:DOS功能调用09H和0AH的配合使用及子程序编写

汇编语言第5次实验报告:DOS功能调用09H和0AH的配合使用及子程序编写
实验环境
1X86系列桌面系统;
2UltraEdit-32、TASM、TLINK、TD。
实验内容
1编写一完整程序,该程序接受长度小于30的字符串后,将串中的小写字母变成大写后重显该串。
2小写字母转换成大写字母的功能以一子程序形式实现(采用寄存器和堆栈两种传递参数的方式分别实现);
3用串0dh,0ah,'$'在实验程序中的适当位置实现新行功能。
实验记录
数据段变量定义的内容如下:
data segment para
inptstrdb30
inptlendb?
inptbufdb31dup('$')
crlfdb0dh,0ah,'$'
data ends
实验记录
小写字母转换成大写字母子程序的代码如下:
upcaseproc
pushbp
movbp,sp
pushsi
成绩评定:指导教师签名:
四川大学计算机学院、软件学院
实验2013141462213
班级
2班
学生专业
计算机类
学院
计算机学院
课程名称
汇编语言程序设计(第五次)
实验时间
2014年11月14日
实验项目
DOS功能及子程序编写
报告撰写时间
2014年11月14日
实验目的
1掌握DOS功能调用09H和0AH的配合使用;
2学习子程序编写。
pushcx
movcx,[bp+4]
movsi,[bp+6]
next:cmpbyte ptr [si],'a'
jbno
cmpbyte ptr [si],'z'

dos汇编debug基本命令程序

dos汇编debug基本命令程序

dos汇编debug基本命令程序DOS汇编(Debug)基本命令程序在学习和编写DOS汇编语言程序时,了解和掌握调试程序是非常重要的。

DOS提供了一个非常有用的调试器,即Debug。

Debug是一个基本的汇编语言调试程序,它可以让程序员在运行程序时进行单步执行,查看寄存器和内存的内容,以及进行程序的调试和错误修复。

本文将介绍DOS汇编(Debug)基本命令程序。

一、启动Debug要启动Debug,可以在DOS命令提示符下输入"debug"命令,然后按Enter键。

此时,会显示Debug的提示符"-",表示Debug 已经启动。

二、基本命令Debug提供了一系列命令,用于执行和调试汇编语言程序。

下面是一些常用的基本命令:1. a(assemble):将汇编指令翻译成机器码,并将其写入内存中。

例如,输入"a 100"表示从内存地址100开始输入汇编指令。

2. d(dump):显示内存中的内容。

可以使用"d"命令来查看内存中的指令和数据。

例如,输入"d 100"表示从内存地址100开始显示内存内容。

3. e(enter):修改内存中的指令或数据。

可以使用"e"命令来修改内存中的指令或数据。

例如,输入"e 100"表示修改内存地址100处的内容。

4. g(go):执行程序。

使用"g"命令可以让程序开始执行。

例如,输入"g"表示开始执行程序。

5. r(register):显示和修改寄存器的内容。

可以使用"r"命令来查看和修改寄存器的内容。

例如,输入"r ax"表示显示或修改AX寄存器的内容。

6. t(trace):单步执行程序。

使用"t"命令可以让程序以单步执行的方式运行。

03《汇编语言程序设计》

03《汇编语言程序设计》

;.《汇编语言程序设计》习题答案一、单项选择题(本大题共170 小题,每小题 2 分)1、在汇编语言程序中,对END 语句的叙述正确的是( C )。

A、END 语句是一可执行语句B、END 语句表示程序执行到此结束C、END 语句表示源程序到此结束D、END 语句在汇编后要产生机器码2、将DX 的内容除以 2 ,正确的指令是( C )A、DIV 2 B 、DIV DX,2C、SAR DX,1 D 、SHL DX,13、下列数值表达式和地址表达式中,错误的是( D )。

A、MOV A L,8*14+4 B 、MOV SI,OFFSET BUF+13C、MOV CX,NUM2-NUM1 D 、MOV CX,NUM2+NUM14、用来存放下一条将要执行的指令地址的寄存器是( B )A、SP B 、IP C 、BP D 、CS5、要使串处理从低地址向高地址进行,应把标志位置为( D )A、IF=1 B 、TF=0 C 、DF=1 D 、DF=06、设SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( A )A、20640HB、2063EHC、2063FH7、十进制数269 变换为十六进制数是( CD、21900H )。

A、10BB、10CC、10DD、10E8、8 位的微型计算机系统是以16 位来表示地址,则该微机系统有( C )个地址空间。

A、255B、65535C、65536D、10485769、8 位有符号二进制数能表示的最大十进制数是( D )。

A、256B、255C、128D、12710、十六进制数88H,可表示成下面几种形式,请找出错误的表示( D )。

A、无符号十进制数136B、带符号十进制数-120C、压缩型BCD十进制数88 D 、8 位二进制数-8 的补码表示A、二进制数B、八进制数C、十进制数D、四进制数12、7 位ASCII 总共可表示( C )个符号。

A、256B、127C、128D、25513、使用DOS功能调用时,子程序编号应放在( B )A、ALB、AHC、AXD、任意指定14、没有语法错误的输出指令是( B ) P76A、OUT AX,30HB、OUT D X,ALC、OUT AL,DXD、OUT 30H,AH15、用MOV指令将十进制数89 以非压缩BCD码格式送入AX,可使用的指令是( B )A、MOV AX,89B、MOV AX,0809HC、MOV AX,89HD、MOV AX,080916、设AX=8765H,DX=4321H,执行CWD指令后,DX中的内容是( B ) P117A、4321HB、0FFFFHC、8000HD、0001H17、设CL=05H,要获得CL=0AH,可选用的指令是( A )A、XOR CL,0FHB、NOT CLC、OR CL,0AHD、AND CL,0FH18、使状态标志位CF清零的错误指令是( C )A、OR AX,AX B 、SUB AX,AXC、MOV CF,0 D 、CLC19、设SP=1110H,执行PUSH AX指令后,SP 的内容为( B )A、SP=1112H B 、SP=110EH C 、SP=1111H D 、SP=110FH20、汇编源程序出现语法错误的指令有( D )A、MOV [BX+SI] ,AL B 、MOV AX,[BP+DI]C、MOV DS,AX D 、MOV CS,AX21、当执行指令ADD AX,BX 后,若AX 的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是(D )A、表示结果中含 1 的个数为偶数B、表示结果中含 1 的个数为奇数C、表示该数为偶数D、表示结果中低八位含 1 的个数为偶数22、下面指令中,合理而有意义的指令是( D )A、REP LODSB B 、REP SCASB C 、REP CMPSB D 、REP MOVSB23、在下列串操作指令中,同时使用源串和目的串地址指针的指令是( D )A、STOSW B 、LODSW C 、SCASW D 、CMPSW24、4B 的字长是( C )。

汇编语言程序设计专科复习题及答案专科复习题

汇编语言程序设计专科复习题及答案专科复习题

汇编语言程序设计专科复习题及答案专科复习题复习题一一、单项选择题1.对于有符号的数来说,下列哪个值最大()A:0F8H B:11010011B C:82 D:123Q2.下列有关汇编语言中标号的命名规则中,错误的是(D )A:通常由字母打头的字符、数字串组成B:标号长度不能超过31个字符C:?和$不能单独作为标号D:.号不可位于标号首3.8088/8086存储器分段,每个段不超过()A.64K个字B.32K个字节C.1兆个字节D.64K个字节4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式()A:寄存器寻址B:相对基址变址寻址C:变址寻址D:基址变址寻址5.若AX= - 15要得到AX=15应执行的指令是()A.NEG AXB.NOT AXC.INC AXD.DEC AX6.8086/8088系统执行传送指令MOV时()A.不影响标志位B.影响DF方向标志C.影响SF符号标志D.影响CF进位标志7.若要求一个操作数中的若干位维持不变,若干位置“1”,可以使用()A:NOT B:OR C:AND D:XOR8.下列指令中段默认为堆栈段的是()A.MOV AX,[BX+SI+10]B.ADD AX,ES:[SI]C.SUB [BX],[BP][DI]D. MOV DX,[1000H]9.关于8086/8088微机系列,下列说法哪个是正确的()A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。

C:在内存空间中,可以无限分配段,且段的大小不受限制。

D:段与段之间可以邻接,也可以重叠。

10.下列关于堆栈的说法,错误的是()A:以“先入后出”为原则。

B:栈区最高地址单元的前一个单元为栈底。

C:运行中SP寄存器动态跟踪栈顶位置。

D:压栈和弹出都是以字节为单位。

11.表示过程定义结束的伪指令是()A.ENDPB.ENDSC.ENDD.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3)COUNT EQU $-BUF1符号COUNT等价的值是()A.6B.18C.16D.9 13.下列标志位中,可以用来判断计算结果正负的是()A:PF B:SF C:DF D:OF14.下列指令正确的是()A. MOV [100H], [BX]B.MOV DS, ESC. ADD V[BX], CXD.MOV AX, 34H15.下列哪个寄存器是属于指针寄存器()A:SI B:DX C:SP D:ES16.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。

汇编语言程序设计实验篇(emu8086)

汇编语言程序设计实验篇(emu8086)

1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。

它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。

该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。

利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。

1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。

打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。

输入全部指令后,单击按钮,保存相应的程序段。

2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。

打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。

在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

第四章汇编语言语法

第四章汇编语言语法

LABEL FAR MOV AX,[SI] ,
3、段定义伪指令语句 、 SEGMENT…ENDS (1)段结构定义伪指令语句 SEGMENT ENDS 指令格式: 指令格式: 段名 逻辑段内容 段名 ENDS SEGMENT 定位类型 组合类型 分类名’ ‘ 分类名 ’
功能:将一个逻辑段的内容定义成一个整体。 功能:将一个逻辑段的内容定义成一个整体。 4种定位类型:PARA、BYTE、WORD和PAGE 种定位类型:PARA、BYTE、WORD和 6种组合类型:NONE、PUBLIC、COMMON、AT、STACK和MEMORY 种组合类型:NONE、PUBLIC、COMMON、AT、STACK和 (2)段分配伪指令语句 指令格式: CS:段名,DS:段名,SS:段名,ES: 指令格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名 功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系。 功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系。
1、数据定义伪指令语句 共有五条: DB、 DW、 DD、 DQ和 DT, 分别用来定义字节、 共有五条 : DB 、 DW 、 DD 、 DQ 和 DT , 分别用来定义字节 、 字 、 双 字、8字节和10字节。 字节和10字节。 10字节 指令格式: 指令格式:
变量名 变量名 助记符 助记符 操作数1 操作数2 操作数n 操作数1,操作数2,……操作数n 操作数 n ;注释 DUP(操作数1 操作数2 操作数n DUP(操作数1,操作数2,……操作数n) ;注释 操作数
第4章 汇编语言语法和 章 汇编语言语法和DOS功能调用 功能调用
4.1 汇编语言程序的格式 例4-1 试求小于100的所有非零偶数,并把结果存入以BUFF开始 的内存区。 1 2 3 4 5 MY_DATA SEGMENT BUFF DB 50 DUP(?) MY_DATA ENDS MY_CODE SEGMENT ASSUME CS:MY_CODE, DS: MY_DATA 6 START: MOV AX, MY_DATA 7 MOV DS, AX ; 定义数据段 ; 设置缓冲区 ; 定义数据段结束 ; 定义代码段 ; 规定CS和DS的内容 ; DS初始化为MY_DATA

汇编语言程序设计考试题型说明(老师上课讲的题)

汇编语言程序设计考试题型说明(老师上课讲的题)

汇编语言程序设计考试题型说明一、填空题(20%)二、选择题(15% )三、是非判断题(10%)四、简答题(10%)五、指出语句错误(8%)六、程序分析题(12%)七、程序填空题(10%)八、程序设计题(15%)•汇编语言题型讲解一、填空题例1.任何变量都有段地址、偏移地址、类型三种属性。

例2.“VAR DB 5 DUP(8,2 DUP(5))”语句汇编应分配15个字节单元。

例3. 请用一条指令实现如下操作:(1)将AX中划‘X’的位清0(2)将BL寄存器的低四位取反:X O R B L,0F H。

例 4.假设存储器中各字节单元的内容是:(06925H)=12H,(06926H)=45H,(06927H)=78H,那么字单元(06925H)= 4512H ,字单元(06926H)= 7845H。

例5.语句DA2 DW ‘AB’ 汇编后在DA2字节单元中存放42H,在DA2+1字节单元中存放41H。

例6.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,[SI+COUNT]中,源操作数的有效地址EA为20A8H,其物理地址为11488H。

例7.R E P、R E P Z、R E P N Z。

例8. DB指令以字节为单位分配存贮;DW指令以字为单位分配存贮。

故如下数据定义:V1 DB 4 DUP (2), 2COUNT EQU 10V2 DW COUNT DUP(?)为变量V1分配5个字节存贮区;为变量V2分配20个字节存贮区。

例9.在执行串处理指令时,为了使地址自动增量,应执行指令:C L D,该指令使得方向标志位例10.中断程序的入口地址称为中断向量IBM PC机中,共有256个中断源,每个中断向量占内存中的中断向量表4个字节。

例11.一个字存入堆栈时,堆栈指针SP -2修正;从堆栈中取出一个字时,SP +2修正,SP 总是指向栈顶单元。

例12.下面是对DOS功能调用方法的简单说明:(1)在AH寄存器中存入所要调用功能的功能号;(2)根据所调用功能的规定设置入口参数;(3)用I N T21H(4)相应的子程序运行完后,可按规定取得出口参数。

汇编语言复习题(附答案)

汇编语言复习题(附答案)

汇编语言复习题注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。

在此文档最后最后附有课后四、六章的答案,大家抓紧时间复习哦!一、选择题1. 把要执行的程序与库文件连接起来形成可执行文件的系统程序是( B ) 。

A. 汇编程序B. 连接程序C. 机器语言程序D. 源代码程序2. 在8088/8086 的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是( C ) 。

A..SS 和SPB.DS 和DIC.CS 和IPD.ES 和SI3. 为了使主机访问外设方便起见,外设中的每个寄存器给予一个( C ) 。

A. 物理地址B. 逻辑地址C. 端口地址D. 段地址4. MOV AX,3064H,该指令中源操作数采用的寻址方式是( A ) 。

A. 立即B. 直接C. 寄存器相对D. 寄存器间接5. 换码指令的助记符是( C ) 。

A. XCHGB. LEASC.XLATD. MOV6. 如果A≥B(A、B有符号数)发生转移,应选择的条件转移指令是( JGE ) 。

7. 下列符号中,可用作标识符的是( C ) 。

A.MOVB.AXC.MSG1D.1ABC8. X DB 10H DUP ( 1,2)内存变量定义语句拥有了( A ) 个字节的存储空间。

A.20DB.10DC.20HD.10H9. 当DF=0时,执行串操作指令MOVS,B变址寄存器SI、DI的值将( C ) 。

A. 不变B. 减 1C. 加 1D. 无法确定10. 如下指令可将AX寄存器内容改变的是( A ) 。

A.AND AX , BX B .TEST AX , BX C.CMP AX , BX D .XCHG AX , AX11.16 位CPU支持的I/O 地址范围是( D ) 。

A.0~0FFFFFH B.0~0FFFFH C.0~0FFFH D.0~0FFH12. M UL CL 指令实现的功能是( A ) 。

2013年汇编语言程序设计习题

2013年汇编语言程序设计习题

2013年汇编语言程序设计习题第一章1.执行下列指令后,正确的结果是( )。

MOV AL,100MOV BL,-2A.AL=100H BL=02H B.AL=64H BL=0FEHC.AL=64H BL=82H D.AL=100H BL=0FEH1.在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。

总线在逻辑上划分为、和。

2.一个CPU的地址线宽度为10,那么可以寻址个内存单元。

3.十六进制数0FFF8H表示的十进制正数为_______,表示的十进制负数为______。

第二章1.CPU要访问的某一存储单元的实际地址称()A.段地址B.偏移地址C.物理地址D.逻辑地址2.8086存贮器组织是将存储器划分为段,可作为段的起始地址是()。

A.185A2H B.00020H C.01004H D.0AB568H3. 在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址为()A. 3017BHB. 30170HC. 3017AHD. 30210H4.8088/8086存储器分段,每个段不超过()。

A.64K个字节B.32K个字节C.1M个字节D.64K个字节5.在DEBUG工具中,单步执行指令的命令是()。

A. GB. DC. TD. R6.指令寄存器IP用来存放代码段中的偏移地址,在程序运行过程中,它始终指向()A.当前指令的首地址B.当前指令的地址C.下一条指令的首地址D.下一指令的地址7.如某存储器分段时,一个段最多允许16K个字节单元,那么表示一个段内偏移地址的二进制位数至少是( )A.14位B.15位C.16位D.17位8.已知(DS)=2000H,(BX)=1256H,(SI)=528FH,则执行指令JMP BX后,IP寄存器的内容是()。

A. 1256HB. 2000HC. 3256HD. 528FH9.设物理地址(21000H)=20H,(21001H)=30H,(21002H)=40H。

(汇编语言教程)5_80868088汇编语言-2

(汇编语言教程)5_80868088汇编语言-2

104H DUP(11H 104H DUP(11H)
DUP( DUP(0)
ENDS
ENDS DATA2 DATA2 SEGMENT PARA DB COMMON ‘DATA2’ DATA2 DATA N2 DATA2 DATA2 105H DUP( 105H DUP(0)
DATA2 DATA2 N1 DATA2 DATA2 END
默认值为: 默认值为:PARA
III、 III、组合类型
段名 SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’] 定位类型] 组合类型] 使用类型] [‘类别 类别’ …… …… ; 语句序列 段名 ENDS
PRIVATE:私有段,不进行组合。 PUBLIC:
– 不同模块中的同为public属性的同名段连接组合成一个逻辑段。
3、过程定义伪指令
格式: 格式:过程名 [类型 类型] PROC [类型] … 过程体语句 RET 段名 ENDP PROC和ENDP是成对出现的 是成对出现的。 PROC和ENDP是成对出现的。 类型有近(NEAR)和远(FAR)两种, 类型有近(NEAR)和远(FAR)两种,若过程缺省 NEAR缺省 则属默认值。若为远过程, FAR不 缺省, 或NEAR缺省,则属默认值。若为远过程,则FAR不 能省略。 能省略。 过程名具有段地址、 过程名具有段地址、段内偏移量和类型三个属 性。
2、源程序开始和结束伪指令
程序开始伪指令
– NAME伪指令 NAME伪指令 – TITLE伪指令 TITLE伪指令
程序结束伪指令
– END
(1)程序开始伪指令NAME 程序开始伪指令NAME
NAME伪指令 NAME伪指令 格式: 格式:NAME 模块名 含义:表示一个模块的开始, 含义:表示一个模块的开始,并给出该模 块名。 块名。

汇编语言 基本指令

汇编语言 基本指令

①输入指令
将外设数据传送给 将外设数据传送给CPU内的 内的AL/AX 内的
IN 指令 一般格式 IN AL,n ; , IN AX,n ; , IN AL,DX ; , IN AX,DX ; , I/O端口输入数据至 端口输入数据至AL或AX. 功 能 从I/O端口输入数据至AL或AX. 输入指令允许把一个字节或一个字由一个输入端口传 送到AL或 中 若端口地址超过255时,则必须用 送到 或AX中.若端口地址超过 时 则必须用DX 保存端口地址,这样用DX作端口寻址最多可寻找 作端口寻址最多可寻找64K 保存端口地址,这样用 作端口寻址最多可寻找 个端口. 个端口.
常用伪指令(补充) 四 常用伪指令(补充)
data segment BUF1 dw 15H,20H,30H,50H,80H BUF2 dw 10 DUP(?) data ends DB和DW也可以定义一组内存空间 相当于一个数组, DB和DW也可以定义一组内存空间,相当于一个数组, 也可以定义一组内存空间, 变量名指向第一个元素的地址. 变量名指向第一个元素的地址. 如 MOV AX,BUF1 MOV BX,BUF1+4 执行后 (AX)=15H,(BX)=30H 因为是字类型所以每后一个元 素+2. .
显示字符串( 号调用 号调用) ⑸显示字符串(9号调用) LEA DX,待显示字符串首偏移地址 , MOV AH,9 , INT 21H; 将当前数据区中以 ' $ ' ; 将当前数据区中以' 结尾的字符串显示 字符串输入( (号调用 ⑹字符串输入SP 10号调用) ( 号调用) SP)- )-2 )- LEA DX,缓冲区首偏移地址 , MOV AH,10 , INT 21H ;从键盘上输入一字符串 到用户定义的输入缓冲区中,并显示. 到用户定义的输入缓冲区中,并显示.

汇编语言编程实验报告

汇编语言编程实验报告

汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。

二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。

六、实验六: (19)七、汇编实验总结 (23)实验一一. 实验题目【汇编语言补充作业T20T20】编写完整程序,利用】编写完整程序,利用DOS 系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。

二. 程序流程及思路实现字符串输入,需要分成三个步骤:实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS 系统功能调用0AH 号子功能,(DS:DX DS:DX))= = 输入缓冲区首址;输入缓冲区首址;输入缓冲区首址;3、在输入的字符串尾加上‘、在输入的字符串尾加上‘$$’字符,以作为输出结束条件。

’字符,以作为输出结束条件。

实现字符串输出,则需要注意的问题是:实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;和字符串实际字符数;2、输出回车换行可利用字符串:、输出回车换行可利用字符串:CR DB 0AH,0DH,CR DB 0AH,0DH,CR DB 0AH,0DH,’’$’。

’。

三. 源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;MAXLEN DB N ;缓冲区字符的最大长度缓冲区字符的最大长度缓冲区字符的最大长度ACTLEN DB ? ;ACTLEN DB ? ;实际字符个数实际字符个数实际字符个数STRING DB N DUP(?) ;STRING DB N DUP(?) ;字符空间字符空间字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行回车换行MOV BL,MAXLEN+1 ;取实际的字符长度取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上输出结尾要加上$ $MOV DX,SI ;把开始存放字符的首地址赋给DX(注:以下程序采用b方法)方法)。

C#调用DOS命令方法

C#调用DOS命令方法
20
21 return p.StandardOutput.ReadToEnd(); //從輸出流取得命令執行結果
控制台模式下 建的目录在 bin\Debug 下面.
D:\testcon\testcon\bin\Debug\test1988
C# code
using System;
eShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
si.cb = sizeof(si);
CreateProcess( "cmd.exe" , NULL , NULL , NULL , FALSE , CREATE_NO_WINDOW , NULL , NULL , &si , NULL ); c#中的Process类可方便的调用外部程序,所以我们可以通过调用cmd.exe程序加入参数 "/c " + 要执行的命令来执行一个dos命令
上面几个属性的设置是比较关键的一步。
既然都设置好了那就启动进程吧,
p.Start();
输入要执行的命令,这里就是ping了,
p.StandardInput.WriteLine("ping -n 1 192.192.132.229");
p.StandardI;);
p.StartInfo .WorkingDirectory ="c:\\";
p.StartInfo.FileName = "ping.exe";
p.StartInfo.Arguments="";

微机原理-第7章 汇编语言与汇编程序5 常用DOS系统功能调用及BIOS功能调用-文档资料

微机原理-第7章 汇编语言与汇编程序5 常用DOS系统功能调用及BIOS功能调用-文档资料

常用DOS系统功能调用
① ② ③ ④ ⑤ ⑥

单字符输入 ( 01H、07H、08H功能 ) 显示单字符 ( 02H、05H功能 ) 单字符输入或显示( 06H功能 ) 字符串输入 ( 0AH功能 ) 显示字符串 ( 09H功能 ) 检测键盘状态 ( 0BH功能 )
① 单字符输入 (01H、07H、08H功能)
max DB 11 DB ? DB 11 DUP(?)
SEGMENT ASSUME CS:code, DS:data MOV AX , data ;置缓冲区地址于DS:DX
ROM BASIC ROM BIOS ( a)
FFFFH
ROM BASIC ROM BIOS (b)
FFFFH
图 7.5-1 PC-DOS (a) DOS启动后 (b) 执行程序装入后
软件中断分类
DOS中断
中断类型号
20H~3FH 为用户程序和系统程序提供磁盘读写、程 序退出、系统功能调用等功能。
③ 单字符输入或显示 (06H功能)
入口参数:DL = 0FFH,表示从键盘输入字符
或 DL ≠ 0FFH,表示DL中是要显示字符的ASCII 码
功能号:
类型号:
AH = 06H
21H
出口参数:若ZF=0时,表示有键按下,将字符的ASCII码
送入寄存器AL, AL=输入字符。 若标志ZF=1时,表示无键按下,寄存器AL中不 是键入字符ASCII码, AL=0 。
② 显示单字符 (02H、05H功能)
(a)2号系统功能调用
入口参数:DL = 要显示字符的ASCII 码 功能号: AH = 02H 类型号: 21H 出口参数:无 实现功能:显示指定字符,光标右移。

几个常用的DOS 系统功能调用(INT 21H)_汇编语言程序设计(第2版)_[共2页]

几个常用的DOS 系统功能调用(INT 21H)_汇编语言程序设计(第2版)_[共2页]

42
图3-21 重新挂载后新增文件出现
3.5 几个常用的DOS系统功能调用(INT 21H)
在前面介绍的程序实例中,键盘的输入和显示输出都采用了DOS系统功能调用INT 21H,大大简化了编程。

所谓功能调用是计算机系统设计的简单I/O子程序,程序员不必了解繁琐的输入/输出的操作细节,而以一种简单、统一的方式使用外部设备,从而集中精力于算法编程,来实现程序目标。

DOS系统功能INT 21H调用的方法:
(1)将调用功能的功能号存入AH寄存器;
(2)如必要,设置该调用功能的入口参数(调用参数);
(3)执行INT 21H指令;
(4)如必要,按规定取得出口参数(返回参数)。

DOS系统功能调用INT 21H,有数百种功能供用户使用。

下面介绍几个常用的DOS系统功能调用,简要描述如表3-1所示。

更多的DOS系统功能调用见附录。

表3-1 部分常用的DOS系统功能调用(INT 21H)
AH 功能入口参数出口参数
01 键盘输入一个字符并回无 AL=输入字符
02 显示输出一个字符DL=输出字符无
07 键盘输入(无回显)无AL=输入字符
09 显示字符串
DS:DX=串地址
字符串以‘$’结束

0A 键盘输入到缓冲区
DS:DX=缓冲区首地址
(DS:DX)=缓冲区字节数
(DS:DX+1)=实际字节数
(DS:DX+2)=输入的串地址4C 程序结束AL=返回码无。

汇编语言DOS系统功能调用表(INT 21H)

汇编语言DOS系统功能调用表(INT 21H)
成功:AX=文件代号
错误:AX=错误码
3D
打开文件
DS:DX=ASCIIZ串地址
AL=0读
=1写
=3读/写
成功:AX=文件代号
错误:AX=错误码
3E
关闭文件
BX=文件代号
失败:AX=错误码
3F
读文件或设备
DS:DX=数据缓冲区地址
BX=文件代号
CX=读取的字节数
读成功:
AX=实际读入的字节数
AX=0已到文件尾
45
复制文件代号
BX=文件代号1
成功:AX=文件代号2
失败:AX=错误码
46
人工复制文件代号
BX=文件代号1
CX=文件代号2
失败:AX=错误码
47
取当前目录路径名
DL=驱动器号
DS:SI=ASCIIZ串地址
(DS:SI)=ASCIIZ串
失败:AX=出错码
48
分配内存空间
BX=申请内存容量
成功:AX=分配内存首地
AH
功能
调用参数
返回参数
00
程序终止(同INT 20H)
CS=程序段前缀
01
键盘输入并回显
AL=输入字符
02
显示输出
DL=输出字符
03
异步通迅输入
AL=输入数据
04
异步通迅输出
DL=输出数据
05
打印机输出
DL=输出字符
06
直接控制台I/O
DL=FF(输入)
DL=字符(输出)
AL=输入字符
07
键盘输入(无回显)
读出错:AX=错误码
40
写文件或设备
DS:DX=数据缓冲区地址

dos调用

dos调用

1、什么是DOS系统功能调用系统功能调用是DOS为用户提供的常用子程序(80多个),可在汇编语言程序中直接调用。

这些子程序的主要功能包括:(1)设备管理(如键盘、显示器、打印机、磁盘等的管理)(2)文件管理和目录操作(3)其他管理(如内存、时间、日期等管理)这些子程序给用户编程带来很大方便,用户不必了解有关的设备、电路、接口等方面的问题,只需直接调用即可。

2、调用方法DOS功能调用的子程序已按顺序编号——功能号(00H~68H),其调用方法是:(1) 功能号→AH(2) 入口参数→指定寄存器(3) INT 21H用户只须给出以上三方面信息,DOS就可根据所给信息自动转入相关子程序执行。

3、常用的系统功能调用(1)键盘输入1) 1号调用——从键盘输入单个字符调用格式:MOV AH,1INT 21H功能:等待从键盘输入一个字符并送入AL。

执行时系统将扫描键盘,等待有健按下,一旦有健按下,就将其字符的ASCII 码读入,先检查是否Ctrl-Break,若是,退出命令执行;否则将ASCII码送AL,同时将该字符送显示器显示。

2) 10号调用——从键盘输入字符串功能:从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。

调用前要求:先定义一个输入缓冲区MAXLEN DB 100 ;第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0ACLEN DB ? ;第2个字节保留,以存放实际输入的字符个数STRING DB 100 DUP(?) ;第3个字节开始存放从键盘输入的字符串。

调用格式:LEA DX,MAXLEN(缓冲区首偏移地址)MOV AH,10INT 21H注意:调用时,要求DS:DX指向输入缓冲区【例】DATA SEGMENTMAXLEN DB100ACLEN DB ?STRING DB 100 DUP(?)DATA ENDSCODE SEGMENT… …MOV AX,DATAMOV DS,AX… …LEA DX,MAXLENMOV AH,10INT 21H… …CODE ENDS运行程序时,若从键盘输入“YOU ARE SUCESSFUL!”(共计19个字符),则输入缓冲区MAXLEN各单元内容缓冲区MAXLEN各存储单元内容(2)显示输出1) 2号调用——在显示器上显示输出单个字符调用格式:MOV DL,待显示字符的ASCII码MOV AH,2INT 21H功能:将DL中的字符送显示器显示。

使汇编程序返回DOS的方法

使汇编程序返回DOS的方法
使汇编程序返回DOS的方法
王 侃
1993-09-24
DOS在加载用户程序时,首先在内存低端建立程序段前缀(PSP),并在PSP+0处存放int 20H的程序终止处理向量,然后执行一系列其它操作,最后步骤是初始化段和指针寄存器,将SP置成被装入模块入口时的SP,将SS置成被装入模块中堆栈段的相对段值,DS,ES均置成PSP+0字段地址,并产生CS,IP,最后转向被加载程序。为返回DOS,在被加载程序最后,应转去调用int 20H中断,将控制转向PSP+0。因此,若程序开始时,将DS(或ES)、0000H进栈保护,则在程序结束时通过执行FARRET,即可达到目的。所以在汇编语言的示范程序中常可见到
以上是常见的用int 20H中断返回DOS的方法,也可使用int 21H的00HPUSH DS
MOV AX,0
PUSH AX
等语句在代码段的开始处。以上是对生成EXE文件的汇编程序而言。对于生成COM文件的汇编程序而言,由于DOS加载程序时,将DS,ES,CS,SS均指向PSP+0字段,栈顶字含有0000H,且COM文件和长度不超过64K,因此CS在程序执行时始终指向PSP+0处,所以只要用户在程序结束时执行NEARRET就可调用int 20H中断返回DOS。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

福建农林大学计算机与信息学院
(程序设计类课程)
实验报告
课程名称:汇编语言
姓名:
系:计算机系
专业:计算机专业
年级:09级
学号:
指导教师:
职称:
2011年12 月30 日
实验项目列表
福建农林大学计算机与信息学院实验报告
系:计算机专业:计算机科学与技术年级: 2009 姓名:学号:实验室号田507 计算机号 79
实验时间:11.11.22 指导教师签字:成绩:
实验四 DOS功能调用
一、实验目的
(1)学会DOS中关于显示功能调用指令的用法;
(2)领会修改显存方法显示字符。

二、实验内容
1)输入一个字符,显示出来。

2)输入一个字符串,显示出来。

3)BUF开始的3个16位二进制数用十六进制数的形式显示出来。

(1)理解程序
(2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。

(3)如果要分行显示,程序要如何修改?
DATA SEGMENT
BUF DW 4F59H, 56A8H, 0FF90H
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DA TA
START: MOV AX, DA TA
MOV DS, AX
MOV SI, 0
P: MOV BX, BUF[SI]
MOV CH, 4
L: MOV CL, 4
ROL BX, CL
MOV DL, BL
AND DL, 0FH
CMP DL, 10
JB NEXT
ADD DL, 7
NEXT: ADD DL, 30H
MOV AH, 2
INT 21H
DEC CH
JNZ L
INC SI
INC SI
CMP SI, 4
JNA P
MOV AH, 4CH
INT 21H
CODE ENDS
END START
4)直接改变显存内容显示。

(1)显存空间分配:
内存地址空间中,B8000H-BFFFFH共32KB的空间,为80×25彩色字符模式显示缓冲区。

向这个地址空间写入数据,写入的内容将立即出现在显示器上。

80×25=2000个字符,每个字符在缓冲区中占2个字节,一个字节存放ASCII码,一个字节存放字符属性(字符颜色、字符背景颜色、闪烁、高亮度)
(2)偏移地址计算:
如第2行,第40列:(2-1)×160+40×2 这个偏移地址中存放字符的ASCII码,
(2-1)×160+40×2+1这个偏移地址中存放字符的属性。

第M行,第N列的一般计算公式为:
(M-1)×160+N*2 存放ASCII码
(M-1)×160+N*2+1 存放属性
(3)运行下列程序,在屏幕的第1行,会显示一个字符X。

根据上面(1)、(2)点理解程序段。

STACK SEGMENT
DB 128 DUP (0)
STACK ENDS
CSEG SEGMENT
ASSUME CS: CSEG, SS: STACK
START: MOV AX, STACK
MOV SS, AX
MOV SP, 128
MOV AX, 0B800H
MOV ES, AX
MOV AH, ‘X’
S: MOV ES: [160*1+40*2], AH
MOV AL, 0
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
5)编程显示以下图案。

*********
*******
*****
***
*
6)编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。

三、实验环境
计算机
四、实验步骤及运行结果
1)编写程序:
DATA SEGMENT
BUF DB ?
DATA ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DATA
START:
MOV AX,CSEG
MOV DS,AX
MOV AH,1
INT 21H
MOV AL,0
MOV AH,4CH
INT 21H
CSEG ENDS
END START
运行输出:
2)编写程序如下:
DATA SEGMENT
BUF DB 20
DB ?
DB 20 DUP(?)
DATA ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DATA START:
MOV AX,DATA
MOV DS,AX
MOV AH,10
MOV DX,OFFSET BUF
INT 21H
MOV BH,0
MOV BL,BUF[1]
INC BL
INC BL
MOV BUF[BX],'$'
MOV AH,9
MOV DX,OFFSET BUF[2]
INT 21H
CSEG ENDS
END START
运行输出:
3)运行程序(程序修改之前的运行情况):
使用分行显示,编写程序:
DATA SEGMENT
MSG DB 0DH,0AH,'$'
BUF DW 4F59H, 56A8H, 0FF90H
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
MOV SI, 0
P: MOV BX, BUF[SI]
MOV CH, 4
L: MOV CL, 4
ROL BX, CL
MOV DL, BL
AND DL, 0FH
CMP DL, 10
JB NEXT
ADD DL, 7
NEXT: ADD DL, 30H
MOV AH, 2
INT 21H
DEC CH
JNZ L
INC SI
INC SI
LEA DX,MSG
MOV AH,09H
INT 21H
CMP SI, 4
JNA P
MOV AH, 4CH
INT 21H
CODE ENDS
END START
运行输出(修改之后的运行结果):
4)运行程序输出:
5)编写程序如下:
data segment
buf1 db "*********",0ah,0dh,"$"
buf2 db "*******",0ah,0dh,"$"
buf3 db "*****",0ah,0dh,"$"
buf4 db "***",0ah,0dh,"$"
buf5 db "*",0ah,0dh,"$"
data ends
assume cs:code,ds:data
code segment
start:mov ax,data
mov ds,ax
lea dx,buf1
mov ax,0900h
int 21h
lea dx,buf2
mov ax,0900h
int 21h
lea dx,buf3
mov ax,0900h
int 21h
lea dx,buf4
mov ax,0900h
int 21h
lea dx,buf5
mov ax,0900h
int 21h
mov ax,4c00h
int 21h
code ends
end start
运行结果输出如下:
五、总结
通过本次上机实验,我学会了DOS中关于显示功能调用指令的用法,通过实验,更好的领会了修改显存方法来显示字符,这让我更一步的了解了汇编,对以后的学习有很好的帮助。

相关文档
最新文档