当前位置:文档之家› 工程学院汇编语言程序设计实验教程

工程学院汇编语言程序设计实验教程

工程学院汇编语言程序设计实验教程
工程学院汇编语言程序设计实验教程

汇编语言实验教程

一、常用DOS命令

1. 进入虚拟DOS

选中开始菜单中的“运行”命令,输入cmd 后按确定,可以进入虚拟DOS环境。如图所示:

打开窗口后,可以在属性中修改字体大小、颜色和窗口大小。并且可以用组合键ALT+ENTER进行窗口最大化。

2. 常用DOS命令

(1)查看目录命令DIR

C:\>dir

C:\>dir/w

(2)显示文件内容命令TYPE

C:\>type test.asm

(3)文件拷贝命令COPY

C:\>copy sa.asm sd.asm 将文件sa.asm拷贝为sd.asm

(4)改变盘符命令

C:\>e:

结果为:E:\>

(5)进入下一级目录

C:\>cd 子目录名

例如:C:\>cd masm5

得:C:\masm5>

(6)改变目录

例如:C:\>cd windows\temp

得:C:\>windows\temp>

(7)退到上级目录

例如:C:\>masm5>abc>cd..

得:C:\>masm5

(8)退到根目录

例如:C:\>masm5>cd\

得:C:\>

(9)清屏

例如:C:\>cls

3. DOS下常用快捷健

(1)清除当前命令行:ESC

(2)输入上次输入的命令:F5

(3)显示曾经输入的所有命令供选择并执行:F7

(4)搜索命令的历史记录,循环显示所有曾经输入的命令,直到按下回车键为止:F8 【技巧1】虚拟DOS下复制粘贴方法

在窗口上点击鼠标右键,选择“标记”后可以用鼠标选择需要复制的字符,点一下右键,然后在光标处点右键选“粘贴”即可。

【技巧2】虚拟DOS窗口增加滚动条

在虚拟DOS窗口中选属性->布局-> 屏幕缓冲区大小->将“高度”改为80以上。

二、程序的编辑、编译和链接

下面我们完整的完成一个实验,实验要求为在计算机屏幕上显示一个字符串“HELLO!”,具体步骤如下。

1. 调用文本编辑软件建立源程序.ASM文件。

利用Windows2000操作系统附件中的“记事本”编辑以下源程序。命名为:Test1.ASM,该程序的功能是在计算机屏幕上显示一个字符串“HELLO!”。

DATA SEGMENT

S1 DB ‘HELLO!’,‘$’

DATA ENDS

STACK SEGMENT PARA STACK

DB 64 DUP(?)

STACK ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV AH,09H

MOV DX,OFFSET S1

INT 21H

RET

MAIN ENDP

CODE ENDS

END S TART

2. 调用汇编程序MASM对源程序汇编产生.OBJ文件。

在C:〉提示符下键入MASM Test1.ASM(回车)

执行上述操作命令之后将在屏幕上显示如下信息:

Microsoft(R) Macro Assembler Version 5.00

Copyright(C) Mirosoft Corp 1981-1985,1987.All rights reserved

Object filename[Test1.OBJ]:(回车)

Source listing[NUL.LST]:(回车)

Cross reference[NUL.CRF]:(回车)

50678 + 410090 Bytes symbol space free

0 warning Errors

0 Severe Errors

在汇编过程中,汇编程序一般采用两遍扫描的方法,第一遍扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等。

在汇编过程中还会产生列表文件和交叉引用文件。列表文件的后缀为.LST,主要用于给出源程序和机器代码程序的清单,以供检查程序使用。交叉引用文件的后缀为.CRF,它是一个为源程序所引用的各种符号进行前后对照的文件,主要用于给出不同程序段中互相引用的全部符号列表。这两个文件是可有可无的,如果不需要生成这两个文件,可以在汇编过程中直接按回车跳过。

列表文件有两部分内容。在第一部分源程序中,最左列是数据或指令在该段从0开始的相对偏移地址,向右依次是指令的机器代码字节个数、机器代码和汇编语言语句。机器代码后有字母"R"表示该指令的立即数/位移量现在不能确定或是只是相对地址,它将在程序连接或进入主存时才能定位。带有“*”的处理器指令是由前面一条伪指令产生的,采用/Sg选项时的列表文件才罗列。如果陈序中有错误(ERROR)或警告(W ARMING),也会会在相应位置提示。列表文件的第二部分是标示符使用情况。对段名和组名给出他们的名字(NAME)、尺寸(Size)、长度(Length)、定位(Align)、组合(Combine)和类别(Class)属性;对符号给出他们的名字、类型(Type)、数值(Value)和属性(Attr)。采用简化段定义格式,有许多汇编系统的预定义标示符,例如@DATA等。

【小技巧】输入“MASM test1; ”(后面加个分号)可以省去中间文件生成的3次提示而直接生成.obj文件

3. 调用链接程序LINK对目标文件进行链接产生可执行文件。

在C:〉提示符下键入LINK Test1(回车)

执行上述命令后将在屏幕上显示如下信息:

Microsoft(R) Overlay Linker Version 3.6

Copyright(C) Mirosoft Corp 1983-1987.All rights reserved

Run File[Test1.EXE]

List File[NUL.MAP]:

Libraries[.LIB]:

在汇编过程中形成了目标文件(.OBJ),但是在该文件中,只是将源程序的操作码部分变成了机器码,而地址操作数还是可浮动的相对地址,不是实际地址,浮动地址需要再定位。只有经过链接过程才能形成最后的可执行文件。链接程序的功能就是把一个或多个目标文件合并成一个可执行文件,其后缀为.EXE。

其实在链接过程中一共形成两个文件:第一个是可执行文件(.EXE)。默认的可执行文件名字与源程序文件相同,也可以根据用户要求进行修改可执行文件的名字。链接过程中形成的第二个文件是内存映像文件(.MAP),它给出了每个段的地址分配情况和长度。如果不需要该文件则可以在链接命令执行时直接键入回车键。在链接过程中还与一个库文件(.LIB文件)相关。一般的汇编程序不需要库文件。但是当汇编语言与高级语言(如C语言)接口时需要用到库文件。此时输入相应的库文件名字即可。映像文件也是一种文本文件,含有每段在存储器中的分配情况。映像文件中首先给出了该程序各个逻辑段的起点(Start)、终点(sTOP)、长度(Length)、段名(Name)和类别(Class);然后是段组(GROUP)位置和组名;最后提示程序开始执行的逻辑地址。注意,这里的起点、终点和段地址是以该程

序文件开头而言的相对地址,实际的绝对地址需要在程序进入主存后确定。

【小技巧】输入“LINK test1; ”(后面加个分号)可以省去中间文件生成的2次提示而直接生成可执行文件

4. 运行可执行文件。

在C:〉提示符下键入Test1(回车),在屏幕上将显示出“1”这个数字。

三、调试工具DEBUG介绍

1.调试程序DEBUG的特点

如果汇编语言的源程序中存在一些语法或格式上的错误,在汇编和链接过程中都可以发现并得到纠正。但是如果在源程序中存在着算法错误和逻辑错误,那就只有在调试过程中才能发现并纠正了。常用的调试工具软件是DEBUG。DEBUG提供了修改寄存器、内存单元内容的命令,可以很方便的修改寄存器、内存单元的内容,为调试程序、修改程序带来了方便。在DEBUG状态下,还为用户提供了调试、控制测试的环境。用户可以在此环境下进行编辑、调试、执行一些简单的汇编程序。由于DEBUG有显示命令。通过显示命令,用户可以观察某个内存单元的内容、CPU内部某个寄存器的内容。并可以根据这些内容的变化情况分析、调试程序。

调试程序debug具有如下功能特点:

1.装入,显示或修改任何文件(带任何扩展名的文件);

2.执行DOS程序;

3.测试和调试程序

4.完成磁盘实际读/写操作;

5.建立、汇编汇编语言源程序或反汇编可执行文件。

2.DEBUG的命令格式

DEBUG.EXE是DOS提供的可用于调试可执行程序的一个工具软件,也是可用于汇编语言程序设计的一种调试工具。调试程序DEBUG.EXE是版本有关的,不同版本的操作系统具有不同的文件(功能一样)。纯DOS操作系统,DEBUG.EXE在DOS目录下;Windows 9x 操作系统,使用Windows文件夹下command子文件夹的DEBUG.EXE文件;Windows 2000/XP操作系统,使用WINNT文件夹下system32子文件夹的DEBUG.EXE文件。需要说明的是,windows操作系统中要使用debug.exe进行程序调试,必须进入到虚拟DOS 中,具体方法是在运行对话框中输入“cmd”后回车即可。然后,在DOS的提示符下,可键入如下命令启动Debug调试程序:

DEBUG [[drive:][path]filename[.exe][parameters]]

命令中各字段含义如下:

Drive:DEBUG将要调试的文件所在的磁盘驱动器。

Path:查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。

filename[.exe]:DEBUG将要调试的文件名。如果用户键入文件名,则启动DEBUG的同时还将指定的文件装入存储器中,用户可对其进行调试,如果未键入文件名,则用户可用当前存储器的内容工作,或者用DEBUG命令N和L将需要的文件装入存储器后再进行调试。

parameters :运行被调试的程序(或文件)时所需的命令行参数。

在DEBUG程序调入后,将出现提示符“-”,此时就可用DEGUG命令来调试程序。

说明:

(1) 运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段,即DEBUG程序后的第一个段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部或https://www.doczj.com/doc/3812943071.html,暂驻部分的结束地址(其中较小的那个地址);指令指针寄存器IP置为0100H(程序段前缀PSP后的第一个语句);状态标志都是清0状态。

(2) 运行Debug程序时,如果载入的被调试程序扩展名不是.EXE(如debug hello.asm),则BX、CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。

(3) 运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段(即PSP段基址),BX、CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。

3. DEBUG的主要命令

Debug 的每个命令都是一个字母,后面跟一个或多个参数,所需注意事项如下:

* 字母不区分大小写

* 命令中各项之间以空格或逗号分隔

* 命令中只能使用16进制数,且要求不带后缀H

* 可用组合键Ctrl-C 或Ctrl-Break终止命令的执行

* 可用F1、F2、F3、Ins、Del、左移键、右移键等编辑键来编辑本行命令

* 若命令有语法错误,会提示“Error”,并用“^”符号指出错误位置

Debug的主要命令及含义如下表所示:

说明:

* 地址:用“段值:偏移量”的形式来表示地址,也可用段寄存器来代表“段值”

例如:1000:0001,ds:1001,es:0200,cs:0030等

* 范围:表示地址范围从哪个地址开始到哪个地址结束。它有二种表示方式:

(1)地址地址——前者表示起始地址,用“段值:偏移量”来表示;后者表示终止地址,只用“偏移量”来表示

(2)地址长度——前者表示起始地址,用“段值:偏移量”来表示;后者表示该区域的大小,用字母’L’开头的数值来表示

例如:100:50 100——段值为100,偏移量从50到100的内存区域,

100:50 L100——段值为100,偏移量从50开始的100个字节区域。

* 端口地址:二位十六进制数值

* 字节值:二位十六进制数值

* 字节值表:由若干个字节值组成,也可以是用引号括起来的字符串

* 驱动器号:0—驱动器A、1—驱动器B、2—驱动器C、3—驱动器D等

(1)A(汇编命令)

格式:A[地址]

用途:该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继的存放在内存从指定位置(缺省为IP指针位置)开始的存储区中。

注意:

* 所有数值默认皆为十六进制整数,数值后不带“H”。如要键入十进制数,则其后应加以说明,如100D。

* 不支持文件管理用的目录表、宏标记、条件汇编

* 跳转指令后要直接书写十六进制地址不支持标号

* 数据类型若非默认类型,要以PTR加以指定

* 字符串操作要指定类型为B或W(如lodsb和lodsw等)及长度

* 用DB和DW接受数据定义,直按进行汇编

* 对内存地址加[]以与立即数区分

* 如果不指定地址,a命令将在它上次停止处开始汇编

* 段超越指令需要在相应指令前,单独一行输入

举例:

-A

1397:0100 MOV CX,5

1397:0103 MOV AL,0

1397:0105 MOV SI,0010

1397:0108 ES:

1397:0109 ADD AL,[SI]

1397:010B INC SI

1397:010C LOOP 0108

(2)C(比较命令)

格式:C 范围起始地址

用途:比较内存的两个区域相对应字节的内容是否相同,对发现有差别的内容及其地址用如下形式显示出(地址A为第一个区域某单元地址,地址B为第二个区域中与地址A相对应的存储单元的地址):

地址A 地址A中值地址B中值地址B

说明:参数range指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度;参数address指定要比较的第二个内存区域的起始地址;若地址范围或地址不含段地址,默认为DS的值。

举例:

-C 100,109 200

该命令对100h 到 109h 的内存数据块与200h到209h的内存数据块进行比较。

Debug响应前面的命令并显示如下信息(假定此时DS = 1397):

1397:0100 35 6E 1397:0300

1397:0102 7D 1C 1397:0302

1397:0106 12 89 1397:0306

1397:0109 58 A4 1397:0309

内容不相等的存储单元的地址和内容会在列表中显示出来,对应内容相等则不会显示

(3)D(显示内存命令)

格式:D[地址范围]

用途:内存内容显示指令,以十六进制和ASCII码形式显示指定范围内的内存内容。

说明:地址范围指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。若不指定范围,第一次从目标程序的CS:IP位置开始显示,以后从上次显示的末地址的下一地址开始进行显示。若不指定长度,则显示128字节共8行的内容。

举例:

-D 0000 001F

Debug 按以下格式显示范围中的内容:

1401:0000 48 45 4C 4C 4F 21 24 00-00 00 00 00 00 00 00 00 HELLO!$ .........

1401:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... ....... 当使用D命令时,Debug以两个部分显示内存内容:左边用十六进制表示每个字节;右边用ASCII字符表示每个字节。每个非打印字符在显示的ASCII部分用“.”表示。每个显示行显示 16 字节的内容,其中在第8字节和第9字节之间有一个连字符。每个显示行从 16 字节的边界上开始。另外,这里没有指定段地址,D命令会自动显示DS段的内容。如果只指定首地址,则

显示从首地址开始的80个字节的内容。

(4)E(输入/修改内存命令)

格式:E 地址 [字节值表]

E 地址

用途:向内存区域输入数据,覆盖掉原有数据。

说明:

*“地址”表示数据输入的内存始地址,“字节值表”表示一组连续的字节数据。

* 第一种格式可以用给定的字节值表的内容来替代指定范围的存储单元内容;第二种格式则是采用逐个单元相继修改的方法来达到输入或修改内存的目的。

* 数据以十六进制形式或以ASCII码形式输入均可。

* 十六进制数要用空格、逗号或制表符加以分隔。字符串则要用单引号或双引号括起且区分大小写。

* 若不指写段址,则默认为DS中值。每写完一数据地址自动增加。

* 如省略字节值表,将对各单元逐个修改。点号前为该字节原始值,点号后输入改后值。这时若按空格,跳过这一字节;按回车,结束输入;按减号或连字符,显示前一字节内容。

* 字符串只能以数值列表的形式输入,不能按地址形式输入。

举例:

-E DS:100 F3'XYZ'8D

其中F3,‘X’,‘Y’,‘Z’和8D各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的容。

-E CS:100

则可能显示为:

1397:0100 89. -

如果需要把该单元的内容修改为78,则可以直接键入78,再按空格键可接着显示下一个单元的内容,这样可以不断修改相继单元的内容,直到Enter键结束该命令为止。

(5)F(填充内存命令)

格式:F 地址范围数值列表

用途:将数值列表中的数据写入内存,并覆盖原有信息。若出错,显示出错信息,原有信息保留。

说明:

* 输入数据以十六进制或字符串两种形式,字符串必须以单引号或双引号括起,区分大小写。

* 若未指写段址,默认为DS寄存器值。

* 若要填充区域大于数据数目,列表可重复使用;相反,若列表比要填充区域大时,则自动截断后面的数据。

* 地址范围为数据输入的内存始本地址或首地址和长度

举例:

-F 04BA:100 L100 47 4F 4F 44

命令执行后,Debug 重复使用值47 4F 4F 44填充从04BA:100 到04BA:1FF 的内存位置,直到所有100H个字节全部填满为止。

(6)G(执行程序命令)

格式:G[=地址][断点0……断点9]

用途:将CPU控制权由Debug转移给被调试中的程序,即运行当前在内存中的程序

说明:

* 地址:Debug开始执行的地址。如未指定段址,则使用目标程序的CS寄存器中的值。当地址省略时,则Debug使用目标程序的CS:IP寄存器的值开始执行。且

为与断点区分,地址参数前必须加等号,否则将其认为是第零个断点。

* 断点0……断点9:指定的0—10个临时中断点。程序在断点处中止时,将会显示寄存器的内容、标志位状态及CS:IP指出的指令(也就是下一条将要执行的指

令),然后是提示符“-”。

(7)H(十六进制运算命令)

格式:H 值1 值2

用途:用来求两个十六进制数的和、差,对结果显示为值1+值2及值1-值2。如果值2 >值1则显示其补码。

说明:

* 值1、2为0—FFFFH范围内的任意十六进制数。

举例:

H 19F 10A

Debug 执行后显示结果为:02A9 0095

(8)I(端口输入命令)

格式:I 端口地址

用途:用来读取指定I/O端口地址,并以2位十六进制数加以显示。

说明:

* 端口地址:0—FFFF范围内的I/O端口地址。

* 警告:I指令将直接访问计算机硬件,不是所以错误检查都能进行,所以使用是必须小心。对某个外设控制器分配端口的输入操作,可能干涉系统固有的操作。(9)O(端口输出命令)

格式:O 端口字节

用途:向I/O端口地址写入一字节。

说明:

* 端口:I/O端口地址。

* 字节:写入I/O端口的0—FFFF范围的值。

* 警告:错误的操作将导致系统崩溃。

(10)L(加载命令)

格式:L 地址

L 地址驱动器开始扇区扇区数

用途:将某个文件或特定磁盘扇区的内容加载到内存。

说明:

* 地址:存放从盘中读出数据的内存地址。

* 驱动器:A=0, B=1, C=2, 以此类推。

* 开始扇区:以十六进制数表示要最先装入的逻辑扇区号。

* 扇区数:以十六进制数表示要装入连续扇区个数。

* 装入后文件长度,或.exe文件程序的实际长度放入目标程序的BX和CX两个寄存器中。高十六位放在BX中。

举例:

假定需要从驱动器 C 将起始逻辑扇区为15 (0Fh) 的109 (6Dh) 个扇区的内容

加载到起始地址为04BA:0100 的内存中,可以键入以下命令:

-L 04BA:100 2 0f 6d

(11)M(内存块移动命令)

格式:M 地址范围地址

用途:对内存中数据进行复制。目的域被覆盖。

说明:

* 地址范围:被复制域的始末地址,或始地址和长度。

* 地址:数据复制目的域的起始地址。

* 若地址范围中无段址,则使用DS内容;若地址中无段址,使用地址范围中的值。

举例:

-M CS:100 110 CS:500

Debug 首先将 CS:110 地址中的内容复制到地址 CS:510 中,然后将 CS:10F 地址

中的内容复制到 CS:50F 中,如此操作直至将 CS:100 地址中的内容复制到地址

CS:500 中。

(12)N(命名命令)

格式:N [驱动器] [路径] 文件名

N 参数 [参数……]

用途:

* 指定后面的 l(加载)或 w(写入)命令所使用的文件。

* 指定被调试文件的命令行参数和开关

举例:

-D EBUG https://www.doczj.com/doc/3812943071.html,

-N PARAM1 PARAM2

-G

g命令会运行程序https://www.doczj.com/doc/3812943071.html,,就好像在命令提示符后键入了命令: PROG PARAM1 PARAM2

(13)P(循环或子程序处理命令)

格式:P [=地址] [命令数]

用途:该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止,并控制返回到 Debug。

说明:

* 地址:执行的起始地址。

* 指令数:执行的指令条数。

* 执行中会显示目标程序寄存器内容、标志位状态和下一条要执行的指令。

* 若地址参数中无段地址,则使用CS中的值。完全忽略地址时,则从程序中的CS:IP 指定位置开始执行。

举例:

假定正在测试的程序在地址 CS:143F 处包含一个 call 指令。要运行 call 目标

位置的子程序然后将控制返回到 Debug可以键入以下命令:

P=143F

(14)Q(Debug退出命令)

格式:Q

用途:程序结束返回,即退出DEBUG,返回DOS。本命令无存盘功能,如需存盘应先使用W命令

(15)R(寄存器查看和修改命令)

格式:R [寄存器]

用途:显示或改变一个或多个 CPU 寄存器的内容

说明:

* 寄存器:AX BX CX DX SP BP SI DI DS ES CS IP PC F

* 若R不带参数,则显示所有寄存器的内容和状态标志、下一条指令。

* 若指定新值,在显示内容后,给出冒句提示输入新值,回车结束。

* 对状态字F,在连字符“-”后以空格间隔输入新值,次序不计。

* 若直接回车,则跳过修改,寄存器内容不变。

(16)S(内存检索命令)

格式:S 地址范围列表

用途:在指定的内存范围内检索列表的值。对每一个匹配的地址进行显示。

说明:

* 地址范围:想来你该明白是什么样了吧:)

* 列表:欲检索的一个以上的字节值或字符串。

* 若起地址中无段址,默认为DS的值。

* 检索范围不得大于FFFFH

* 列表必须以分隔符(空格,逗号,制表符等)分隔;字符串要加单引号或双引号括起,区分大小写。

举例:

查找包含值 41 并且范围从 CS:100 到 CS:110 的所有地址,可用以下指令实现:-S CS:100 110 41

Debug会按以下格式显示结果:

04BA:0104

04BA:010D

以下命令在 CS:100 到 CS:1A0 的范围内搜索字符串“Ph”。

SCS:100 1A0 "PH"

(17)T(单步跟踪命令)

格式:T [=地址][指令数]

用途:执行单条指令,显示寄存器的值及下一条指令。

说明:

* 地址:执行的第一条指令的地址。

* 指令数:执行的机器指令的条数。

* 在地址参数中若无段址,则默认为CS寄存器的值。若全部省略,则由CS:IP寄存器指出的地址开始执行,以后则顺序执行。

* 对ROM内的跟踪应使用T命令。

* 警告:对8259 中断屏幕的内容(IBM PC及兼容机端口20H和21H)的更改,或者系统功能调用(INT 21H),不能使用T指令,对上述情况要使用P指令。

(18)U(反汇编命令)

格式:U [地址范围]

用途:反汇编字节并显示相应的原语句,其中包括地址和字节值。

说明:

* 地址范围中无段址时,默认使用CS值。

* 当始地址与实际边界不一致时,结果将不可信。

* 若不含末地址或长度,则自给定始地址起反汇编32个字节。

* 以后由前次U最后一指令的下一指令做32字节的反汇编。

* 若从没用过U,则于CS:IP开始进行反汇编。

* 只能对8086指令解码,对其它以DB来显示。

举例:

要反汇编 16 (10h) 字节,从地址 04BA:0100 开始,可以键入以下命令:

-U 0B6D:100L10

Debug 按以下格式显示结果:

0B6D:0100 26 ES:

0B6D:0101 894502 MOV [DI+02],AX

0B6D:0104 58 POP AX

0B6D:0105 3C01 CMP AL,01

0B6D:0107 750A JNZ 0113

0B6D:0109 26 ES:

0B6D:010A 895504 MOV [DI+04],DX

0B6D:010D 26 ES:

0B6D:010E 894D06 MOV [DI+06],CX

(19)W(写磁盘命令)

格式: W [地址]

W 地址驱动器开始扇区扇区数

用途:将内存中的文件写入到磁盘。

说明:

* 地址:待写入盘的数据在内存中的起始位置。

* 驱动器:写入数据的盘的驱动器号(A=0,B=1,C=2,以下类推)。

* 开始扇区:写入数据的最前的逻辑扇区号(0—FFFFH)

* 扇区数:写入数据的连续扇区个数(0—FFFFH)。

* W若不带参数,或只有地址参数,则按BX:CX寄存器指出的字节,从内存向磁盘写入数据。此时的文件名是此命令前最后一个使用过的文件名,或者是N命

令中指定的文件,如果没有使用过N命令,则使用Debug命令行中指定的文件。

* W命令不能向扩展名为.EXE或.HEX的文件中写入数据。但可以通过更改扩展名的方法让其能对.exe文件写入。

* 若无地址项,则认为是目标程序的CS:0100H。

* 该命令可不通过MS-DOS的文件系统直接访问磁盘的逻辑扇区。但必须以十六进制形式给在命令行中给定各参数。

* W命令不能对用于网络上的驱动器进行逻辑扇区写入处理。

* 警告:若参数有误,则可能破坏盘文件结构。请务必先搞清再作试践,特别是对硬盘的操作。

举例:

假定要将起始地址为 CS:100 的内存内容写入到驱动器 B 的磁盘中。需要将数据

从磁盘的逻辑扇区号 37h 开始并持续 2Bh 个扇区。为此,键入以下命令:-W CS:100 1 37 2B

当写操作完成时,Debug 再次显示Debug 提示符。

四、应用DEBUG软件调试程序实验

实验步骤

1)进入DEBUG环境

在Windows2000环境下,按顺序选择“开始”→“程序”→“附件”→“命令提示符”后进入DOS环境,键入“DEBUG”后即可进入DEBUG,此时屏幕上显示“_”提示符号。

2)A(编辑命令)使用练习

用DEBUG的A命令输入程序。

_A100

0357:0100 MOV AL,34

0357:0102 MOV DL,36

0357:0104 ADD DL,AL

0357:0106 SUB DL,32

0357:0109 MOV AH,2

0357:010B INT 21

0357:010D INT 20

0357:010F(回车)

键入A命令时,自动产生程序所存内存单元的段地址和偏移地址。程序输入结束时,只需键入回车键就可以退出汇编状态(A状态),回到DEBUG状态。

注意:使用A命令时,只要注意起始地址的偏移地址从0100开始即可。至于前面的段地址是随机变化的(取决于当前内存使用情况),对此不必介意。

3)C(比较命令)使用练习

首先利用A命令输入以下内容

_A100

0357:0100 MOV AL,34

0357:0102 MOV DL,36

0357:0104 ADD DL,AL

0357:0106 SUB DL,32

0357:0109 MOV AL,34

0357:010B MOV DL,36

0357:010D ADD DL,AL

0357:010F SUB D L,30

0357:0112 (回车)

然后利用C命令对0100-0108与0109-0112两个区域内存存放的内容进行比较。

-C 100,108 109

该命令执行后将显示两块存储区域存放内容不一致的那些单元。

4)D(显示内存命令)使用练习

_A100

0357:0100 DW 0100

0357:0102 DW 0302

0357:0104 DW 0504

0357:0106 DW 0706

0357:0108 DW 0908

0357:010A DW 0B0A

0357:010C DW 0D0C

0357:010E DW 0F0E

0357:0110

之后利用D命令查看该区域内容。

_D100

5)R(寄存器显示命令)使用练习

首先利用A命令输入以下内容

_A100

0357:0100 MOV AL,34

0357:0102 MOV AH,36

0357:0104 MOV BL,AL

0357:0106 MOV BH,32

0357:0108 MOV CL,55

0357:010A MOV CH,AA

0357:010C MOV DL,AL

0357:010E MOV DH,30

0357:0110

利用运行命令G运行,G=100,110

使用R命令看各寄存器结果。(与R命令相结合做练习)

利用R命令分别查看AX、BX、CX、DX、AL、AH、BL、BH、CL、CH、DL、DH 内容。

利用R命令将AX、BX、CX、DX的内容都改为55AA。

6)G(运行命令)使用练习

首先利用A命令输入以下内容

_A100

0357:0100 MOV AL,34

0357:0102 MOV AH,36

0357:0104 MOV BL,AL

0357:0106 MOV BH,32

0357:0108 MOV CL,55

0357:010A MOV CH,AA

0357:010C MOV DL,AL

0357:010E MOV DH,30

0357:0110

然后执行运行命令:G=100,10E。之后使用R命令查看有关寄存器内容。

7)T(跟踪命令)使用练习

_A100

0357:0100 MOV AL,34

0357:0102 MOV AH,36

0357:0104 MOV BL,AL

0357:0106 MOV BH,32

0357:0108 MOV CL,55

0357:010A MOV CH,AA

0357:010C MOV DL,AL

0357:010E MOV DH,30

0357:0110

然后执行T=100,1命令。

观察程序运行情况和指令执行后寄存器的变化情况。再执行T=100,2观察程序运行结果。

8)U(反汇编命令)使用练习

首先利用A命令输入以下内容

_A100

0357:0100 MOV AL,34

0357:0102 MOV AH,36

0357:0104 MOV BL,AL

0357:0106 MOV BH,32

0357:0108 MOV CL,55

0357:010A MOV CH,AA

0357:010C MOV DL,AL

0357:010E MOV DH,30

0357:0110

然后执行U100命令。观察该命令执行后屏幕显示内容。并与原来输入的程序内容进行比对。

9)Q(退出命令)使用练习

在DEBUG的提示符下输入Q(回车)。将会回到DOS环境下。

五、8086指令使用

六、8086汇编语言程序设计

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

汇编语言程序设计教学大纲

《汇编语言程序设计》课程教学大纲 二、课程简介 汇编语言是计算机能够提供给用户使用的最快最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而,对程序的空间和时间要求很高的场合及需要直接控制硬件的应用场合,汇编语言的应用是必不可少三、课程目标 汇编语言课程是计算机专业的一门专业选修课。通过本课程的学习,应使学 生系统地了解计算机组成原理与内部的运行机理,掌握汇编语言程序设计及相关 知识,为学习本专业后继课程和进行与硬件有关的技术工作打下良好基础。通过 上机实验,使学生受到软硬件实验的初步训练,并培养学生分析问题和解决问题 的能力。 四、教学内容及要求 第一章基础知识 1.教学内容 (1) 为什么要用汇编语言编写程序 (2) 进位计数制与不同基数的数之间的转换 (3) 二进制数和十六进制数运算 (4) 计算机中数和字符的表示 (5) 几种基本的逻辑运算 2.基本要求 了解机器指令、代码指令、机器语言、汇编指令、汇编语言、汇编语言源程 序、汇编程序、汇编等概念;掌握进位计数制与不同基数的数之间的转换及

运算;计算机中数和字符的表示;“与”、“或”、“非”、“异或”等几种基本的逻辑运算; 第二章80X86计算机组织 1.教学内容 计算机系统概述、存储器、中央处理机和外部设备。 2.基本要求 理解计算机的硬件和软件系统及其关系。掌握计算机的基本结构及总线;存储器的内容、地址及存储器的分段;中央处理机的组成、80X86系列CPU工作寄存器构成和功能,特别是段寄存器和标志寄存器;外设接口、端口和8086/8088的端口地址范围和访问方法。 第三章80X86的指令系统 1.教学内容(重点内容) IBM PC机的寻址方式、IBM PC机的指令系统。 2.基本要求 熟练掌握IBM PC机寻址方式及物理地址的计算;数据传送、算术、逻辑、串处理、控制转移和处理机控制指令六组中的所有指令的格式、操作、及影响的标志位。了解机器语言的指令组成; 第四章汇编语言程序格式 1.教学内容 汇编程序功能、伪操作、汇编语言程序格式、汇编语言程序的上机过程。 2.基本要求 掌握DEBUG程序和命令及能用DEBUG 程序调试和运行简单小程序;汇编语言上机步骤、汇编程序的功能;数据定义及存储器分配、表达式赋值“EQU”和“=”、段定义、程序开始和结束、对准、基数控制等六类伪操作;汇编语言程序格式中的名字、操作、操作数和注释等项。 第五章循环与分支程序设计 1.教学内容 程序设计的一般步骤和基本结构、循环程序设计和分支程序设计 2.基本要求 掌握汇编语言程序的编制步骤和结构化程序设计的三种基本结构;循环的设计方法和多层循环的设计;分支程序的设计方法,并能编制相应的程序。第六章子程序结构 1.教学内容 子程序的设计方法、嵌套与递归子程序、子程序举例和DOS系统功能调用

汇编语言程序设计实验教程

汇编语言程序设计实验教程

目录 第一章上机过程 (4) 1.1编辑源程序 (4) 1.2 汇编源程序 (5) 1.3连接目标程序 (6) 1.4运行程序 (7) 第二章DEBUG命令祥解 (8) 2.1 DEBUG程序使用 (8) 2.2 DEBUG的常用命令 (8) 第三章汇编语言程序设计实验 (13) 3.1实验一顺序与分支程序设计 (13) 3.2 实验二循环与子程序程序设计 (15) 3.3 实验三算术运算与代码转换程序设计 (16) 3.4 实验四字符串的匹配与替换程序设计 (18) 3.5 实验五输入输出程序设计 (19) 第四章部分实验参考答案 (21)

第一章上机过程 1.1编辑源程序 汇编语言源程序:用汇编语句编写的解决应用问题的程序。 汇编程序:将汇编语言源程序翻译成机器语言程序的系统。 汇编:将汇编语言程序翻译成机器语言程序的过程。 在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。 (1)编辑软件 编辑软件:EDIT、QE、WORD、NOTEPAD等。 当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。 (2)汇编程序 有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。 (3)连接程序 用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的目标代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。 (4)辅助工具程序(.EXE) 进行汇编语言程序调试和文件格式转换的程序有: https://www.doczj.com/doc/3812943071.html, 动态调试程序 EXE2BIN.EXE文件格式转换程序

汇编语言学习知识程序设计实验

目录 目录 (1) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著) 《计算机操作系统原理》 《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。 《数据结构和算法》——这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时) 《软件工程》——这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华) 《Windows 程序设计》——《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本 建议:你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书 关于编程的网站 计算机编程 郭新明-FTP服务器体验式学习课程(张孝祥监制) https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=3997 https://www.doczj.com/doc/3812943071.html,快速开发新闻系统在线播放 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=4708 数字电路基础[宁波电大] https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=774 计算机组成与汇编语言程序设计(赵丽梅)宁波电大 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=1242 操作系统(陈访荣)宁波电大(在线播放) https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=4708 计算机网络(马敏飞)宁波电大 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=1243 https://www.doczj.com/doc/3812943071.html, 2.0快速入门(12)-https://www.doczj.com/doc/3812943071.html, 2.0网站快速导航 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=2501 Internet和Intranet应用(薛昭旺)宁波电大 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=1245 2004年电脑硬件安装调试维修视频教学讲授 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=4825 https://www.doczj.com/doc/3812943071.html, 高级排错技巧 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=768 SQL Server 2000管理专家系列课程 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=4832 开心三人行系列(2):使用Atlas 构建AJAX应用 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=2564 Visual Basic 2005开发技巧系列课程(4): 在Visual Basic 2005中使用.NET Framework 2.0新增功能 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=2526 SQL Server 2005 系列课程-使用ADO https://www.doczj.com/doc/3812943071.html,开发SQL Server 2005 OLAP应用 https://www.doczj.com/doc/3812943071.html,/so/so138.aspx?id=2535

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

新版汇编语言程序设计习题答案(钱晓捷主 编)

新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕ 1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

汇编语言程序设计教程(第3版 卜艳萍)参考答案

汇编语言程序设计教程(第3版) 习题参考答案 第1章汇编语言基础知识 思考与练习 1.计算机系统分哪几个层次?简述计算机系统的硬件结构。 1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层 硬件系统是指构成计算机系统的物理实体或物理装置。它由控制器、运算器、存储器、输入设备和输出设备等部件构成。 2.简述用汇编语言进行程序设计的必要性。 1)程序要具有较快的执行时间,或者只能占用较小的存储容量。例如,操作系统的核 心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。 2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。例如,I/O接口电路 的初始化程序段,外部设备的低层驱动程序等。 3)大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动 态连接库等。 4)没有合适的高级语言或只能采用汇编语言的时候。例如,开发最新的处理器程序时, 暂时没有支持新指令的编译程序。 5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解 密软件、分析和防治计算机病毒等。 3.汉字编码主要分哪几类?每类的功能如何? 汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。 1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用 西文标准键盘上的字母数字串表示汉字的编码。目前,汉字输入编码方法主要有三 种:数字编码、拼音编码和字形编码。 2)汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标 码。无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标 识每个汉字。 3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息 处理系统内部存储、处理、传输汉字用的编码。 4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。4.计算机的字长是怎么定义的,试举例说明。 计算机能同时处理二进制信息的位宽定义为计算机的字长。如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。 5.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值? 用相应进制的数值加上进制标记即可。

汇编语言程序设计实验篇emu

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。 1.1.1创建程序 https://www.doczj.com/doc/3812943071.html, 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”部分可以分别输入相应的变量定义和指令。

第四章MCS-51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

大工19秋《汇编语言程序设计》大作业题目及要求

学习中心: 专业: 年级:年春/秋季 学号: 学生: 题目: 1.谈谈你对本课程学习过程中的心得体会与建议 2.《汇编语言程序设计》课程设计,从以下5个题目中任选其一作答。 《汇编语言程序设计》课程设计 注意:从以下5个题目中任选其一作答。 总则:只能使用汇编语言进行编制,不能选用C/C++等高级语言 作业提交: 大作业上交时文件名写法为:[姓名奥鹏卡号学习中心](如:戴卫东浙江台州奥鹏学习中心[1]VIP) 以附件word文档形式上交离线作业(附件的大小限制在10M以内),选择已完成的作业(注意命名),点提交即可。如下图所示。

注意事项: 独立完成作业,不准抄袭其他人或者请人代做,如有雷同作业,成绩以零分计! 题目一:进制转换程序 要求:(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码、使用指令具体含义)章节。 (2)算法思路:比如可设计二进制转化十六进制的算法, 简单介绍该算法的基本思想,100字左右即可。 (3)算法程序框图:绘制流程图或原理图,从算法的开始 到结束的程序框图。 (4)主要函数代码:列出算法的具体代码。 (5)列出算法中使用指令的含义,比如解释MOV指令的 含义,ADD指令的含义,至少撰写十个指令。 总则:只能使用汇编语言进行编制,不能选用C/C++等高级语言! 题目二:冒泡排序算法 要求:(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码、使用指令具体含义)章节。 (2)算法思路:简单介绍冒泡排序算法的基本思想,至少 100字。 (3)算法程序框图:绘制流程图或原理图,从算法的开始 到结束的程序框图。

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)解析

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社) (沈美明,温冬蝉著) 第二章 1.解答:有256个 2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元 E5 1E 3C 2A 3.解答: 30022H字节单元内容: ABH 30024H字节单元内容: EFH 30021H字单元内容: AB34H 30022H字单元内容: CDABH 4.解答: 这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址 5.解答: CS+IP 第一个字的物理地址为: 0AAA40H 6.解答: 条件标志OF,SF,ZF,CF,的值依次为:0,0,0,0 7.下列操作可使用那些寄存器? (1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH ,AL等(2)循环计数 CX (3)乘法和除法DX,AX,AH,AL (4)保存段地址CS ,DS,ES,SS (5)表示运算结果为O FLAGS (6)将要执行的指令地址IP (7) 将要从堆栈取出数据的地址BP,SP,SS 8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP 9.一一对应; 5--A 4--B 2--C 3--D 12--E 9--F 11--G 10--H 13--I 8--J 7--K 6---L 1--M 15--N 14--O 第三章 1.(1)立即寻址没有 (2)直接寻址7237H (3)使用BX的寄存器寻址没有 (4)使用BX的间接寻址 637DH (5)使用BX的寄存器相对寻址0D5B4H (6)基址变址寻址8E18H (7)相对基址变址004FH 2.根据下列要求,写出相应的汇编指令。 (1)ADD DX,BX (2) ADD AL,[BX][SI] (3) ADD [BX][0B2H], CX (4) MOV AX,2A59H ADD [0524H] ,AX (5) ADD AL ,0B5H

汇编语言程序设计课程教学大纲

课程教学大纲 (理论课) 课程名称:汇编语言程序设计 适用专业:计算机科学与技术 课程类别:学科基础课 制订时间: 2006年8月 数学与计算机科学学院制

汇编语言程序设计课程教学大纲 (2002年制订,2006年修订) 一、课程代码:0502121009 二、课程类别:学科基础课程 三、预修课程:计算机导论、高级语言程序设计等 四、学分: 4学分 五、学时: 86学时(其中实验部分32学时) 六、课程概述: 汇编语言是计算机能提供给用户最快也最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而在对于程序的空间和时间要求很高的场合,汇编语言是必不可少的,至于对于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可。 汇编语言作为计算机专业的一门必修课程是了解计算机体系结构和操作系统的最佳切入点。通过汇编语言课程的学习,对计算机理论中包括CPU体系结构、指令调度方式、存储器管理、基本输入输出接口的理解都会有一个比较本质而且直观的认识。在对汇编语言实际运用的基础上同时还能帮助对高级语言程序设计的深入体会,包括变量的组织,地址的访问,循环与分支在机器码中的处理,调用函数时参数的传递等,所以汇编语言在本专业中是一门核心的课程,通过对本课程的学习是加深对后续课程认识的基础。 七、教学目的: 通过对本课程的学习,掌握8086微处理器的寄存器组和基本寻址方式,学生要达到对程序在计算机中的基本调度有一定认识,对二进制基础理论有深入的理解,同时熟练掌握8086汇编语言的编写方式,掌握基本的系统调用,具备良好的源程序调试能力以及最基本的、实模式下的反汇编能力。

2013年汇编语言程序设计课程设计

2013年汇编语言程序设计课程设计 一、作业题目 2013年汇编语言程序设计大型作业给出了3道题目,供大家凭自己的兴趣自由选择其中之一完成。这3道作业题目如下: 1.通用进制转换程序 2.两位数加减乘除程序 3.高精度乘法程序 二、交付的文档材料 1.程序系统说明书 内容包括: (1)程序系统总体的功能模块调用图及模块功能说明。 (2)程序系统的详细框图(每个子程序的流程图)。 (3)程序界面图。 (4)程序清单。 2.设计和实现的技术特点、不足和改进的建议 3.课程设计的体会。 4.程序源程序和可执行程序 三、评分说明 独立完成:60分,雷同或抄袭者不及格; 设计技术及技巧使用:25分; 文档质量:10分; 按时完成:5分。 可以自主扩充功能,有创新加分。 四、参考书 1.课本 2.《IBM-PC汇编语言程序设计》清华大学出版社 五、交付时间:第十八周的周五。

题目一通用进制转换程序 一、题目要求 实现不同进制之间的相互转换。(常用进制二、八、十、十六进制) 程序功能: 1.能通过键盘输入任一种进制,有相应的提示信息。 例如please input a Binary data: 2. 输入的数据要有容错检测。 例如:输入的二进制数据为1200,则应该出现错误信息提示。(因为2在二进制中是不允许的 3.输出的数据要有进制选择。 例如:请选择输出数据的进制(0: 二进制,1: 八进制……) 二、重点考察 1.用汇编实现简单的算法。 2.用汇编实现简单的数据结构。 3.可执行程序的参数使用。 4.INT 21H系统功能调用中有关显示与输出的操作 5.综合解决问题的能力。

相关主题
文本预览
相关文档 最新文档