汇编语言-DOS功能调用
- 格式:doc
- 大小:79.50 KB
- 文档页数:9
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相关的操作,比如读写文件、显示字符和字符串等。
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"命令可以让程序以单步执行的方式运行。
;.《汇编语言程序设计》习题答案一、单项选择题(本大题共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,可表示成下面几种形式,请找出错误的表示()。
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”部分可以分别输入相应的变量定义和指令。
汇编语言程序设计考试题型说明一、填空题(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 ) 。
福建农林大学计算机与信息学院
(程序设计类课程)
实验报告
课程名称:汇编语言
姓名:
系:计算机系
专业:计算机专业
年级: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中关于显示功能调用指令的用法,通过实验,更好的领会了修改显存方法来显示字符,这让我更一步的了解了汇编,对以后的学习有很好的帮助。