汇编程序1

合集下载

实验一、汇编语言程序的上机过程及调试

实验一、汇编语言程序的上机过程及调试

实验一、汇编语言程序的上机过程及调试<i>汇编程序调试过程</i>实验一、汇编语言程序的上机过程及调试<i>汇编程序调试过程</i>一、实验目的熟练掌握汇编语言上机汇编、连接和装入运行。

学会使用调试程序DEBUG或TD来进行程序调试。

<i>汇编程序调试过程</i>二、实验内容(一)汇编程序建立过程a.建立汇编源程序─通过b.编译为目标文件d.连接为可执行文件c.不通过,重新修改(语句错误)f.不正确,用调试工具调试,重新修改(逻辑错误)e运行正确g.完成<i>汇编程序调试过程</i>汇编语言的源程序需要编译和连接后才能在计算机上执行。

汇编语言源程序扩展名规定为.ASM。

用MASM编译源程序后,将产生源程序的目标程序文件,其扩展名为.OBJ。

再经过连接程序(LINK)把目标程序文件与库文件或其他目标文件连接在一起形成可执行文件(扩展名为.EXE)。

这时就可以运行该程序了。

DOS下可直接键入可执行程序的文件名从而运行该程序。

<i>汇编程序调试过程</i>(二)过程详细说明步骤a: 建立汇编源程序如果现在的根目录不是E盘,写入E :然后回车,再打入cd *** (***是你新建的文件夹名),例如电气031班的同学,现在你的DOS界面根目录为:E\dq031 。

打入edit然后回车,EDIT的操作画面便会出现在屏幕上,alt键可以控制工具栏操作,←↑→↓箭头控制阴影选择的上下移动。

我们现在按alt键,选中flie, 按↓选中open,回车,找到刚刚拷贝的asm 文件,回车。

选择存盘并给你输入的文件起一个文件名,形式:*** . asm ;然后回到dos环境。

<i>汇编程序调试过程</i>步骤b: 编译目标文件在DOS提示符下键入MASM *** .asm回车,(其中***为你刚才在*****RE a 中建立的文件名)这时汇编程序的输出文件可以有三个(分别:.obj .lst .crf),便会出现三次提问,在这可以一路回车即可。

8086汇编语言程序设计——第一个程序

8086汇编语言程序设计——第一个程序

8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。

Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。

汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。

学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。

⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。

假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。

D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。

1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。

伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。

⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。

汇编语⾔程序建⽴及汇编过程如图所⽰。

⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。

注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。

执⾏MASM和LINK命令时需要按多次回车。

3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。

汇编语言程序设计(第四版)第1_4章【课后答案】

汇编语言程序设计(第四版)第1_4章【课后答案】

汇编语言程序设计第四版【课后习题答案】第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〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。

〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。

Windows X64汇编入门(1)

Windows X64汇编入门(1)

Windows X64汇编入门(1)tankaiha最近断断续续接触了些64位汇编的知识,这里小结一下,一是阶段学习的回顾,二是希望对64位汇编新手有所帮助。

我也是刚接触这方面知识,文中肯定有错误之处,大家多指正。

文章的标题包含了本文的四方面主要内容:(1)Windows:本文是在windows环境下的汇编程序设计,调试环境为Windows Vista 64位版,调用的均为windows API。

(2)X64:本文讨论的是x64汇编,这里的x64表示AMD64和Intel的EM64T,而不包括IA64。

至于三者间的区别,可自行搜索。

(3)汇编:顾名思义,本文讨论的编程语言是汇编,其它高级语言的64位编程均不属于讨论范畴。

(4)入门:既是入门,便不会很全。

其一,文中有很多知识仅仅点到为止,更深入的学习留待日后努力。

其二,便于类似我这样刚接触x64汇编的新手入门。

本文所有代码的调试环境:Windows Vista x64,Intel Core 2 Duo。

1. 建立开发环境1.1 编译器的选择对应于不同的x64汇编工具,开发环境也有所不同。

最普遍的要算微软的MASM,在x64环境中,相应的编译器已经更名为ml64.exe,随Visual Studio 2005一起发布。

因此,如果你是微软的忠实fans,直接安装VS2005既可。

运行时,只需打开相应的64位命令行窗口(图1),便可以用ml64进行编译了。

1.jpg下载此附件需要消耗2Kx,下载中会自动扣除。

第二个推荐的编译器是GoASM,共包含三个文件:GoASM编译器、GoLINK链接器和GoRC资源编译器,且自带了Include目录。

它的最大好外是小,不用为了学习64位汇编安装几个G 的VS。

因此,本文的代码就在GoASM下编译。

第三个Yasm,因为不熟,所以不再赘述,感兴趣的朋友自行测试吧。

不同的编译器,语法会有一定差别,这在下面再说。

1.2 IDE的选择搜遍了Internet也没有找到支持asm64的IDE,甚至连个Editor都没有。

IBM-PC汇编语言程序设计(第二版)答案1-8章

IBM-PC汇编语言程序设计(第二版)答案1-8章

///第一章. 习题1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001b=171h(2) 10000=10 0111 0001 0000b=2710h(3) 4095=1111 1111 1111b=fffh(4) 32767=111 1111 1111 1111b=7fffh1.2 将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101b=2dh=45(2) 1000 0000b=80h=128(3) 1111 1111 1111 1111b=ffffh=65535(4) 1111 1111b=ffh=2551.3 将下列十六进制数转换为二进制数和十进制数:(1) fa (2) 5b (3) fffe (4) 1234答:(1) fah=1111 1010b=250(2) 5bh=101 1011b=91(3) fffeh=1111 1111 1111 1110b=65534(4) 1234h=1 0010 0011 0100b=46601.4 完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3a+b7 (2) 1234+af (3) abcd-fe (4) 7ab×6f答:(1) 3a+b7h=f1h=241(2) 1234+afh=12e3h=4835(3) abcd-feh=aacfh=43727(4) 7ab×6fh=35325h=2178931.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011b+0100 1100b=1111 0111b=0f7h;cf=0;of=0(2) 85+(-76)=0101 0101b+1011 0100b=0000 1001b=09h;cf=1;of=0(3) 85-76=0101 0101b-0100 1100b=0101 0101b+1011 0100b=0000 1001b=09h;cf=0;of=0(4) 85-(-76)=0101 0101b-1011 0100b=0101 0101b+0100 1100b=10100001b=0a1h;cf=0;of=1(5) (-85)-76=1010 1011b-0100 1100b=1010 1011b+1011 0100b=0101 1111b=5fh;cf=0;of=1(6) -85-(-76)=1010 1011b-1011 0100b=1010 1011b+0100 1100b=11110111b=0f7h;cf=0;of=01.6 下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) d8 (2) ff答:(1) d8h表示的带符号数为-40,d8h表示的无符号数为216;(2) ffh表示的带符号数为-1,ffh表示的无符号数为255。

ch4-1汇编语言程序设计(伪指令)

ch4-1汇编语言程序设计(伪指令)
什么是伪指令?
由汇编程序执行的“指令系统” 用于定义变量、分配存储区、定义逻辑段、
指示程序开始和结束等 在汇编时被解释执行,不产生任何目标代码
常用伪指令分类
数据定义伪指令 符号定义伪指令 段定义伪指令 过程定义伪指令 宏命令伪指令 结束伪指令
第四章 汇编语言程序设计
第四章 汇编语言程序设计
data SEGMENT
名字 Hello DB ‘Hello, world!’,0DH,0AH,’$’
data ENDS prog SEGMENT
伪指令
ASSUME CS:prog ,DS:data
start: MOV AX,data
MOV DS,AX
标号
LEA DX,hello
MOV AH,9
INT 21H 指令码 MOV AH,4CH
NUM:ADD AL,30H
RET
第四章 汇编语言程序设计
2.汇编语言与高级语言
• 汇编语言是一种依赖于计算机微处理器的语言 • 汇编语言一般不具有通用性和可移植性 • 进行汇编语言程序设计必须熟悉机器的硬件资
源和软件资源 • 高级语言是面向过程的语言 • 高级语言具有很好的通用性和可移植性
第四章 汇编语言程序设计
INT 21H
prog ENDS
操作数
END start
(4)操作数
常量 变量或标号 表达式 寄存器 存储器单元
第四章 汇编语言程序设计
第四章 汇编语言程序设计
表达式: 算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出
注意:
名字和标号: 标号后有冒号,在指令性语句前;名字后不加

汇编语言源程序的框架结构(1)

汇编语言源程序的框架结构(1)

AH,1
;1号DOS功能调用,接收分支号
21H
AL,'0'
;进行合法判断
ERROR
AL,'2'
ERROR
BX,TAB
;取地址表首址
AL,30H
AL,1
;段内转移乘以2,段间转移乘以4
AH,AH
;AH清零
BX,AX
WORD PTR [BX]
;产生多分支转移
精选课件
A0: MOV INT JMP A1: MOV INT JMP A2: MOV INT JMP
AL,1
;AL←(X×4-Y)/2
Z,AL
;存结果
;取程序段前缀首地址
精选课件
PROC1 ENDP
CODE ENDS
§5.3 分支结构程序设计
分支程序结构可以有两种形式,如图5.4所示,它们分 别相当于高级语言程序中的IF-THEN-ELSE语句和CASE 语句,它们适用于要根据不同条件做不同处理的情况。
精选课件
: TAB
JMP SHORT A0
JMP SHORT A1
参考程序:
JMP SHORT A2 :
DATA SEGMENT
MENU DB 0DH,0AH,"0:Chinese!"
DB 0DH,0AH,"1:English!"
DB 0DH,0AH,"2: German!"
DB 0DH,0AH,"Please choose one to answer the following question:$"
解:要测试出VAR中1的个数就应该逐位进行测试,可根据最低 位是否为1来计数,然后用移位的办法把各位数逐次移到最低位去, 共需要测试8次。程序流程如图5.11所示:

实验一汇编语言上机及Debug调试

实验一汇编语言上机及Debug调试

实验一汇编语言程序上机过程以及调试(1)一、预习内容1.工具软件MASM、LINK的使用2.常用DEBUG命令的使用: G,D,R,T,U,Q3.完整程序设计方法的格式。

二、目的要求1.掌握常用工具软件MASM、LINK的使用2.掌握常用DEBUG命令: G,D,R,T,U,Q 能灵活使用这些命令调试程序3.掌握完整程序设计方法的格式,能正确书写数据段,代码段等。

三、实验内容比较两个字符串string1和string2所含的字符是否相同,如果相同则显示’Match'否则显示’No match’.请读程序,并将程序补充完整。

DSEG SEGMENTstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.'mess1 db 'Match.',13,10,'$'mess2 db 'No match.',13,10,'$'DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG, es:DSEG,MAIN PROC FARstart: mov ax, dsegmov ds, axmov es, axlea si ,string1①cld②repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp: mov ah,09hint 21hmov ax, 4c00hint 21hMAIN ENDPCSEG ENDSend start实验步骤:1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在d:\masm下,注意保存时将文件扩展名改为.asm(如test1.asm)。

2)屏幕左下角”开始”–“运行”输入cmd ,进入dos命令操作,先用d: 和cd mas m 命令改变路经,接着用”masm + 文件名” (如masm test1,这里文件名可以不带扩展名)对源文件进行汇编,产生.obj文件和.LST文件。

汇编语言程序设计第3章第一个程序3.5习题

汇编语言程序设计第3章第一个程序3.5习题

( 5 )把在单元 l00H 到 12BH 的符号码进行反汇编;-U CS:100 12B ( 6 )把 24A63BH 输人数据段内起始于 18AH 的存储单元。-E DS:18A 2 4 A 63B
7 .说明以下每一种文件的用途:
( l ) . ASM 文件 汇编源程序 ;
( 2 ). LST 文件 列表文件
C . F4000H
D . 2F800H
15 .汇编语言中的变量有多种类型属性,错误的类型是( B )。
A .字节型 byte B .字符型 char C .字型 word D .双字型 dword
3.5.2 问答题 1.下列变量各占多少字节?
NUMBYTE DB 1 , 10 DUP ( ? ) , ' $ ' 答:11 个字节
D .编译程序
13 .既对可执行程序(文件名.EXE )进行运行,也可以对其进行调试的程序
是( B )。
A . MASM
B . DEBUG
C . EDIT
D .LINK
14 .用 DEBUG 调试程序时,显示某指令的地址是 2F80:F400,此时段寄存器
CS 的值是( B )。
A . F400H
B . 2F80H
DATAB DW 10 DUP ( 0 )
;DS=1050 ,TYPE=2, LENDTH=10
SIZE=20
DATAC DB 5 DUP ( 0 , 1 , 2 DUP ( 3,4 ) , 5 ); DS=1050 ,TYPE=1, LENDTH=5 SIZE=5
DATA ENDS
EDATA SEGMENT NUMA DB 1 , 2 DUP ( 10 , 20 ) ;ES=1080,TYPE=1,LENGTH=1,SIZE=1 NUMB DW 10 DUP ( ?) , 10 ;ES=1080,TYPE=2,LENGTH=10,SIZE=20 NUMC DB ‘THANK YOU !’ , , ODH , OAH , ' $ ' ;ES=1080,TYPE=1,LENGTH=5,SIZE=5 EDATA ENDS

汇编语言程序设计的实验环境及上机步骤

汇编语言程序设计的实验环境及上机步骤

汇编语言程序设计的实验环境及上机步骤一、实验环境汇编语言程序设计的实验环境如下:1.硬件环境微型计算机(Intel x86系列CPU)一台2.软件环境⏹Windows98/2000/XP操作系统⏹任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)⏹汇编程序(MASM.EXE或TASM.EXE)⏹连接程序(LINK.EXE或TLINK.EXE)⏹调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。

二、上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。

1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。

如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。

请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。

2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。

下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。

在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“ C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口,如图1所示。

图1 文本编辑器EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。

紧接着标题行下面的是菜单行,窗口最下面一行是提示行。

菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。

汇编语言小程序例子

汇编语言小程序例子

盛年不重来,一日难再晨。

及时宜自勉,岁月不待人。

1.编写统计AX中1、0个数的源程序。

1的个数存入CH,0的个数存入CL。

CODE SEGMENTASSUME CS:CODESTART: MOV CX, 0MOV DX,17AA1: SUB DX, 1JZ AA3SHL AX, 1JNC AA2INC CHJMP AA1AA2: INC CLJMP AA1AA3: MOV AH,4CHINT 21HCODE ENDSEND START2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。

程序:DATA SEGMENTR1 DB 'MATCH',0AH,0DHR2 DB 'NO MATCH',0AH,0DH STRING1 DB 'XXXXX'N1 EQU $-STRING1STRING2 DB 'YYYYY'N2 EQU $-STRING2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,N1CMP AX,N2JNZ AA1ADD AX,1LEA SI,STRING1LEA DI,STRING2AA2: MOV BL,[SI]MOV BH,[DI]INC SIINC DISUB AX,1JZ AA3CMP BL,BH JZ AA2JMP AA1AA3: LEA BX,R1 MOV CX,7 AA4: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA4JMP EAA1: LEA BX,R2 MOV CX,10 AA5: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA5INT 21HCODE ENDSEND START3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。

《汇编语言程序设计(1)》模拟试题一和答案

《汇编语言程序设计(1)》模拟试题一和答案

《汇编语言程序设计(1)》模拟试题一一、单项选择题(本大题共20个小题,每小题2分,共计40分)1、为了便于实现多级中断,保存现场信息最有效的方式是采用( )。

A、通用寄存器B、堆栈C、存储器D、寄存器2、8086CPU中有4个数据寄存器,其中AX除用作通用寄存器外,还可用作( )。

A、累加器B、计数器C、基址寄存器D、段寄存器3、如果(AL)=11111111B,执行INC AL指令后,CF= ( )。

A、1B、0C、2D、和执行INC AL指令之前的取值保持一致4、以下指令中,执行后要影响标志位的指令为( )。

A、MOV AL,BLB、LAHFC、CLCD、PUSHF5、在机器内部操作中,CPU与存储器之间的任何信息交换使用的都是( )。

A、逻辑地址B、物理地址C、有效地址D、相对地址6、用来表示堆栈指针的寄存器是( )。

A、IPB、BPC、SPD、SS7、8086CPU在基址加变址的寻址方式中,变址寄存器可以为()。

A、BX或CXB、CX或SIC、DX或SID、SI或DI8、如果当前(SP)=0058H,执行POP AX指令后,(SP)=( )。

A、60HB、56HC、59HD、5AH9、设DS=27FCH,某一数据存储单元的偏移地址为8640H,则数据存储单元的物理地址正确的是( )。

A、27FCHB、27FC0HC、8640HD、30600H10、PSW寄存器中共有( )位条件状态位,有( )位控制状态位。

A、6、3B、3、6C、8、4D、4、811、“与非”门中的某一个输入值为“0”,那么它的输出值( )。

A、为“0”B、为“1”C、取决于正逻辑还是负逻辑D、取决于其他输入端的值12、在段内寻址时,可以提供偏移地址的寄存器组是( )。

A、AX、BX、CX、DXB、BP、SS、IP、SIC、BX、BP、SI、DID、CS、DS、ES、SS13、为了便于实现多级中断,保存现场信息最有效的方式是采用( )。

第1章 基础知识-汇编语言程序设计教程-陆遥-清华大学出版社

第1章  基础知识-汇编语言程序设计教程-陆遥-清华大学出版社

【例1.8】设x = -1001011,求其8位补码[x]补 。 解: x 为负数,先求其原码 [x]原 = 11001011 符号位不变,数字位按位取反 ↓
[x]反 = 10110100 加1 ↓ 得到x的补码 [x]补 = 10110101
注意:同样位数的补码与原码的数据表示范围不 完全重叠,补码可表示的绝对值最大的负数(即 -2n -1)没有对应的原码。
【例1.1】用8421码计算3+6。
解:
0 0 1 1 …… 3的8421码
+
0 1 1 0 …… 6的8421码
1 0 0 1 …… 9的8421码
【例1.2】用8421码计算5+7。
解:
0 1 0 1 …… 5的8421码
+
0 1 1 1 …… 7的8421码
1 1 0 0 …… 不在正常的8421码范围内
【例1.5】① 若 x = +1011100,则 [x]反 = 01011100 ② 若 x = -0010011,则 [x]反 = 11101100
3)补码表示法
设|x|<2n,则x的补码被定义为
[x]补 = 2n +x (mod 2n)
其中,n为所形成的补码的位数,包括1位符号位 和n-1位数字位。
+
0 1 1 0 …… 对运算结果加6调整
1 0 0 1 0 …… 十进制数12的8421码
【例1.3】用8421码计算8+9。
解:
1 0 0 0 …… 8的8421码
+
1 0 0 1 …… 9的8421码
1 0 0 0 1 …… 运算结果错误
+
0 1 1 0 …… 对运算结果加6调整

汇编语言程序设计第1阶段测试题

汇编语言程序设计第1阶段测试题

汇编语⾔程序设计第1阶段测试题江南⼤学现代远程教育第⼀阶段测试卷A考试科⽬:《汇编语⾔程序设计》第1章⾄第3章(总分100分)时间:90分钟______________学习中⼼(教学点)批次:层次:专业:学号:⾝份证号:姓名:得分:⼀、单选题(每题2分,共22分)1.下列指令中,不正确的指令是。

A.MOV [BX+SI],AX B.MOV AX,[BX + SI]C.MOV AX,SI D.MOV AX,[BX + CX]2、下列传送指令中有语法错误的是A、MOV CS,AXB、MOV DS,AXC、MOV SS,AXD、MOV ES,AX3.表⽰⼀条处理器指令所在存储单元的符号地址是。

A.变量B.常量C.标号D.偏移量4.如代码段段名为COSE,它的起始地址为20A00H,程序开始执⾏的起始地址标号为START,对代码段寄存器CS赋值段地址值的⽅法是。

A.MOV CS,20A0HB.ASSUME CS:COSEC.END STARTD.MOV AX,COSEMOV CS,AX5.11000110B为⼀个数的⼆进制补码,该数的⼗进制原码为。

A.+198 B.-198 C.+58 D.-586、指令“MOV CX,[BP+16]”的源操作数采⽤的段寄存器为。

A.CS B.SSC.DS D.ES7.指令“MOV ES:[2000H],AX”中,⽬的操作数的寻址⽅式为。

A.⽴即数寻址B.寄存器寻址C.存储器直接寻址D.寄存器间接寻址8.若(DS)=1100H,(SS)=2200H,(BP)=100H,(DI)=200H,指令MOV AX,[BP+DI+5]中源操作数的有效地址EA为。

A.11305H B. 22305H C.305H D.33305H9.16位⼆进制补码表⽰为⼗进制数的范围是。

A.-32768D~32768D B.-32768D~32767DC.-32767D~32768D D.-32767D~32767D10、BUF DW 10H DUP(3 DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是A、80HB、100HC、124D、19211.在汇编语⾔程序中,对END语句的叙述正确的是。

如何运行汇编程序

如何运行汇编程序

如何运⾏汇编程序在WIN10环境下,运⾏汇编程序不是很简单,当然,如果你⽤⼀些集成环境下的ide去运⾏汇编的话,那会⾮常⽅便,就和C/C++的编译器⼀样⽅便,但是在这⾥,我们主要说下,如何在dosbox下运⾏汇编程序,这还是稍微⿇烦些的。

⾸先,编写你的汇编程序,你可以⽤记事本,也可以⽤notepad++等等的⼯具,完成后,将后缀改为.asm。

假设这⾥我们的⽂件名是1.asm。

然后,下载dosbox,然后打开,打开dosbox后会出现两个框,⼀个带蓝⾊的,⼀个是⿊⾊的我们要在带蓝⾊的框内输⼊命令。

接下来呢,我们要进⾏的⼀个操作叫做挂载,为什么要执⾏这个操作呢?因为这个dosbox是在windows环境下模拟dos环境的,⽽dos环境下,它只有⼀个C盘,但是我们windos有这么多盘,dos要把哪个当成他⾃⼰的C盘呢?那么挂载的意义就是让dos明⽩⾃⼰的C盘在哪,挂载的命令如下:mount c: d:\asm这个的意思就是,把windows下D盘的asm⽂件夹当成dos下的C盘,没错,我⾃⼰在D盘下新创建了⼀个⽂件夹叫做asm,我们把这个⽂件夹当作dos的C盘。

然后,我们进⼊C盘,命令是:c:然后,我们就可以开始在dos下操作了。

⽬前为⽌我们⼀共说了两条命令,就是这两条:mount c: d:\asmc:这⾥说⼀下,这两条命令在我们每次打开dosbox时都要输⼊⼀遍才⾏,对的,dosbox只要⼀关闭,它就会忘了⾃⼰的C盘在哪了,所以每次打开后,你都要重新告诉它⼀遍C盘在哪,这样稍微有点⿇烦。

那么我们就说下如何能够避免这个⿇烦:打开dosbox后会出现两个框,⼀个带蓝⾊的,⼀个是⿊⾊的,在⿊⾊的框⾥有⼀个路径,我们去找这个路径,在这路径的尽头,我们会会找到⼀个⽂件,它的后缀名应该是.conf。

我们⽤记事本打开这个⽂件,把记事本拉到最后,然后把刚才那两条命令粘贴进去,保存,退出就⾏了。

那么这是什么意思呢?这个⽂件叫做配置⽂件,它可以设置⼀些dosbox的参数,在这个⽂件的末尾是⼀个特殊的区域,在这个区域内的命令,只要⼀打开dosbox,这些命令就会⾃动运⾏。

【汇编】从键盘输入字符串并输出该字符串(汇编程序)

【汇编】从键盘输入字符串并输出该字符串(汇编程序)

【汇编】从键盘输⼊字符串并输出该字符串(汇编程序)原⽂地址/s/blog_4b7bd3380100a76z.html1 DATAS SEGMENT2STR DB"please input a string:$"3 BUF DB 204 DB ?5 DB 20 DUP (?)6 CRLF DB 0AH,0DH,"$";此处输⼊数据段代码7 DATAS ENDS8 STACKS SEGMENT STACK9 DB 200 DUP(?) ;此处输⼊堆栈段代码10 STACKS ENDS1112 CODES SEGMENT13 ASSUME CS:CODES,DS:DATAS,SS:STACKS14START:MOV AX,DATAS15MOV DS,AX16LEA DX,STR17MOV AH,918INT 21H19MOV AH,1020LEA DX,BUF21INT 21H22LEA DX,CRLF23MOV AH,924INT 21H25MOV CL,BUF+126LEA SI,BUF+227NEXT:MOV DL,[SI]28MOV AH,229INT 21H30INC SI31DEC CL32JNZ NEXT;此处输⼊代码段代码33MOV AH,4CH34INT 21H35 CODES ENDS36 END START以上是从键盘输⼊字符串并输出该字符串的简单汇编程序以下是整理的对上⾯程序的部分解释:BUF:键盘缓冲区BUF。

DB:定义变量的类型为字节类型。

DB 20:表⽰缓冲区能容纳20个字符。

DB 200 DUP(?)中的问号:不对分配的存储单元初始化。

DS:存放当前数据段的段地址。

CS:存放当前代码段的段地址。

SS:存放当前堆栈段的段地址。

MOV:传送指令。

AX:存放接收到的数据或发送数据。

DX:使⽤间接寻址时存放端⼝地址。

LEA:取偏移地址。

CL:在移位指令和循环移动指令中,存放移位次数或者循环移位次数。

王庆生主编的汇编语言程序设计课后答案习题1详解

王庆生主编的汇编语言程序设计课后答案习题1详解

习题11.1把下列十进制数转换为二进制数和十六进制数。

(1)67 (2)34 (3)254 (4)123答:(1)67D=1000011B=43H(2)34D=100010B=22H(3)254D=11111110B=0feH(4)123D=1111011B=7bH1.2把下列二进制数转换为十六进制数和十进制数。

(1)01101101 (2)10110010 (3)111111答:(1)01101101B=6dH=109D(2)10110010B=0d2H=208D(3) 111111B=3fH=63D1.3作下列十六进制数的运算,并转换为十进制数校核。

(1)5a+64 (2)86-49 (3)123-9a (4)43*2b 答:(1) 5aH+64H=0beH90D+100D=190D正确(2)86H-49H=3dH134D-73D=61D正确(3)123H-9aH=89H291D-154D=137D正确(4)43H*2bH=0b3fH67D*43D=2881D正确1.4下列各数均为十进制数,请采用八位二进制补码运算,并回答标致寄存器flags中CF和OF的值,运算结果所代表的十进制数是多少?如果用十六进制补码运算,其结果所代表的十进制数是多少?FLAGS中CF和OF的值呢?(1)85+69 (2)85+(-69) (3)85-(-69) (3)85-(69)答:(1)八位二进制01010101+01000101=10011010=-102D CF=0,OF=1十六位二进制0000000001010101+0000000001000101=0000000010011010 =154DCF=0,OF=0(2)八位二进制01010101+10111011=00010000=16D CF=1,OF=0十六位二进制0000000001010101+1111111110111011=0000000000010000 =16DCF=1,OF=0(3)八位二进制01010101-10111011=10011010=-102D CF=1,OF=1十六位二进制0000000001010101-1111111110111011=0000000010011010 =154DCF=1,OF=0(4)八位二进制01010101-01000101=00010000=16D CF=0,OF=0十六位二进制0000000001010101-0000000001000101=0000000000010000 =16DCF=0,OF=01.5 实模式下,写出段地址和偏移地址为1234:2002、1430:0042、FF00:0FFF的物理地址。

汇编语言程序设计 第1篇 汇编语言基础知识

汇编语言程序设计 第1篇 汇编语言基础知识

汇编 语言实现 汇编后的目 标文件只有 208字节
2019/1/23
11
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
建议: ●充分注意“汇编”课实践性强的特点, ●多读程序,多写程序,多上机调试程序, ●熟悉PC机的编程结构, ●掌握汇编语言及其程序设计的基本概念、
2019/1/23
第 1章
汇编语言基础知识
19
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
(3)一般的十进制数转换成二进制数 为了将一个既有整数又有小数部分的十进制数转换成二进制 数,可以将其整数部分和小数部分分别进行转换,然后再组合 起来。 例:117.8125D = 1110101.1101B
1.1.2 汇编语言的特点
经常与高级语言配合使用,应用十分广泛。
2019/1/23
第 1章
汇编语言基础知识
9
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
编程实现 c =a+b,并在屏幕上显示出结果。 #include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { int a,b,c; a=1; b=2; c=a+b; printf(“c=%d\n",c); return 0; }
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件环境
主要是指支持汇编语言程序运行和帮助建立汇编语言源 程序的一些软件, 程序的一些软件,主要包括:
(1)DOS操作系统 DOS操作系统 (2)编辑程序 编辑程序EDIT. (3)宏汇编程序MASM.EXE 宏汇编程序MASM. (4)连接程序LINK.EXE 连接程序LINK. (5)调试程序 调试程序DEBUG.
8
汇编语言程序运行实例
程序要求: 程序要求:
从键盘输入10个字符 然后以与键入相反的顺序将10 10个字 从键盘输入10个字符,然后以与键入相反的顺序将10个字 10个字符, 符输出到显示屏幕上。设定源程序名为STR ASM。 STR. 符输出到显示屏幕上。设定源程序名为STR.ASM。
第一步: EDIT建立汇编语言源程序 第一步:用EDIT建立汇编语言源程序
源程序文件建立完毕后,调用宏汇编程序MASM对 源程序文件建立完毕后,调用宏汇编程序MASM对 STR.ASM进行汇编 结果如下图所示: STR.ASM进行汇编,结果如下图所示: 进行汇编,
11
第三步: 第三步: 用LINK进行连接生成可执行文件 进行连接生成可执行文件
汇编完毕程序正确,则可调用LINK进行连接,生成可 执行文件STR.EXE,过程如下图所示。
12
第四步: 第四步: 程序的运行
在DOS状态下,直接键入可执行的程序文件名STR, 然后从键盘输入10个字符,并将其倒序排列输出,过程 如下图所示。
13
汇编语言源程序的格式
汇编语言源程序通常由一个或几个程序 模块组成, 模块组成,每个模块一般由三个逻辑段组成: 数据段——存放数据 存放数据、 数据段——存放数据、变量 堆栈段——堆栈区域 堆栈段——堆栈区域 代码段——存放程序指令 代码段——存放程序指令
第4章 汇编语言程序设计
mov ax,12h call display Jmp 1234h
1
主要内容:
汇编语言的格式 汇编语言语句格式 伪指令 汇编语言程序设计
2
4.1 汇编语言的格式及相关基本概念 回顾:
机器语言——二进制数形式的指令和数据。 机器语言——二进制数形式的指令和数据。 B0 64 是什么意思?这就是机器语言。既不直 观,又不易理解和记忆. 又不易理解和记忆. MOV AL,64H ;很容易记忆理解,这就是助记 AL, 很容易记忆理解,这就是助记 符。 助记符——用便于记忆的英语单词表示的指令 助记符——用便于记忆的英语单词表示的指令 操作码。它反映了指令的功能和主要特征, 操作码。它反映了指令的功能和主要特征,便于人 们理解和记忆。
21
2.标号——指令所在内存单元的符号地址 2.标号——指令所在内存单元的符号地址
有三个属性: 段地址:即标号所在段的段地址; 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 偏移量:标号所代表存储单元的段内偏移地址; NEAR或FAR: 类 型:NEAR或FAR: NEAR—表示标号所在语句与转移指令/ NEAR—表示标号所在语句与转移指令/ 调用指令在同一码段内, 调用指令在同一码段内,跳转时 只需改变IP即可。 只需改变IP即可。 FAR—表示标号所在语句与转移指令/ FAR—表示标号所在语句与转移指令/ 调用指令不在同一代码段内。 若没有对类型进行说明,默认为NEAR。 若没有对类型进行说明,默认为NEAR。 标号通常作为转移指令 CALL指令 标号通常作为转移指令或CALL指令的转移地址。 转移指令或 指令的转移地址。
句都有一条机器码指令与其对应;
●指示性语句由汇编程序执行。它指出汇编 指示性语句由汇编程序执行。它指出汇编
程序应如何对源程序进行汇编,如何定义变 量、分配存储单元以及指示程序开始和结束 等。指示性语句无机器码指令与其相对应。
指令性语句汇编时生成机器码; 指令性语句汇编时生成机器码; 生成机器码 指示性语句汇编时不生成机器码。 指示性语句汇编时不生成机器码。 不生成机器码
LP1: LP1: mov ax,VAR ax,VAR … loop LP1
相关概念: 汇编语言——指令助记符,符号地址,标号, 汇编语言——指令助记符,符号地址,标号, 伪指令等语言元素的集合以及这些元素使用的 规则。 规则。 用汇编语言编写的程序叫汇编语言源程序 用汇编语言编写的程序叫汇编语言源程序。 汇编语言源程序。
在DOS状态下,调用EDIT编辑程序建立文件名为 DOS状态下,调用EDIT编辑程序建立文件名为 状态下 EDIT STR.ASM的汇编源程序。 STR.ASM的汇编源程序。 的汇编源程序 其屏幕显示如下图: 其屏幕显示如下图:
9
10
第二步:用MASM汇编生成目标文件 第二步:用MASM汇编生成目标文件
7
运行汇编语言程序的步骤
(1)用编辑程序建立扩展名为.ASM的汇编语言 用编辑程序建立扩展名为.ASM的汇编语言 建立扩展名为.ASM 源程序文件; 源程序文件; 用汇编程序MASM.EXE MASM.EXE将汇编语言源程序文件汇编成 (2)用汇编程序MASM.EXE将汇编语言源程序文件汇编成 用机器码表示的目标程序文件,其扩展名为.OBJ .OBJ; 用机器码表示的目标程序文件,其扩展名为.OBJ; 若在汇编过程中出现语法错误, (3)若在汇编过程中出现语法错误,根据错误信息提示 如位置、类型、说明), ),用编辑软件重新调入源程序进行 (如位置、类型、说明),用编辑软件重新调入源程序进行 修改。无错误时采用连接程序LINK.EXE LINK.EXE把目标文件转化成可 修改。无错误时采用连接程序LINK.EXE把目标文件转化成可 执行文件,其扩展名为.EXE .EXE; 执行文件,其扩展名为.EXE; 生成可执行文件后, DOS命令状态下直接键入文件 (4)生成可执行文件后,在DOS命令状态下直接键入文件 名就可执行该文件。 名就可执行该文件。
18
注释——以分号开头,可放在指令后,也可 注释——以分号开头,可放在指令后,也可 单独一行。 注意注解的写法。要写指令(段)在程 序中的作用,而不要写指令的操作。
例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值
显然,第二种写法要比第一种写法要好。
代码段
15
4.2 4.2 汇编语言的语句与格式
汇编语言的语句有两种: 汇编语言的语句有两种:
指令性语句——由8086指令助记符构成的语句 指令性语句——由8086指令助记符构成的语句 指示性语句——由伪指令构成的语句 指示性语句——由伪指令构成的语句
指令性语句的格式为: 指令性语句的格式为:
标号: 指令助记符 目的操作数,源操作数 ;注释 标号: 目的操作数,
17
语句的构成元素:
标号—— 标号——指令的符号地址,用来代表指令在存储器中的
地址。只能出现在指令性语句中,标号后应加上冒号。 地址。只能出现在指令性语句中,标号后应加上冒号。
名字—— 名字——段、过程、变量的名字,用来代表它们在存储
器中的地址。只能出现在指示性语句中,名字后不加冒 器中的地址。只能出现在指示性语句中,名字后不加冒 号。
指示性语句的格式为: 指示性语句的格式为:
名字 伪指令 操作数1,操作数2,…,操作数n 1,操作数 操作数1,操作数2, 操作数n ;注释
注:各部分之间至少要用一个空格作为分隔符。 各部分之间至少要用一个空格作为分隔符。
16
●指令性语句由CPU执行,每一条指令性语 指令性语句由CPU执行,每一条指令性语
汇编语言 源程序
ห้องสมุดไป่ตู้
汇编程序
机器语言 目标程序
源程序的编译程序
5
汇编语言程序设计与执行过程
输入汇编语言源程序 汇编(编译) 链接 调试 源文件 .ASM 目标文件 .OBJ 可执行文件 .EXE 最终程序
6
汇编语言的工作环境及上机步骤
硬件环境
目前8086汇编语言程序一般多在IBM PC/XT及其兼容机 目前8086汇编语言程序一般多在IBM PC/XT及其兼容机 上运行,要求机器具备基本配置即可以了。 上运行,要求机器具备基本配置即可以了。
22
3.变量 3.变量
变量——即内存中的存储单元或数据区。 变量——即内存中的存储单元或数据区。 变量名——是存储单元(数据区) 变量名——是存储单元(数据区)的符号地 址或名字。
变量也有三个属性: 变量也有三个属性:
段地址—变量所在段的段地址(Segment) 段地址—变量所在段的段地址(Segment) 偏移量— 偏移量—变量单元地址与段首地址之间的位移量。 类 型—有BYTE、WORD和DWORD三种。 BYTE、WORD和DWORD三种。
名字
标号
20
4.3 4.3 数据项与表达式
数据项包括常量 变量、标号及表达式。 数据项包括常量、变量、标号及表达式。 常量、 1.常量 1.常量
二进制数, 二进制数,以B结尾。如01001101B。 结尾。如01001101B。 十进制数, 85。 十进制数,如85。 十六进制数, 十六进制数,以H结尾。第1个数字为A-F时,前 结尾。 个数字为A 面应加0 面应加0,如0F160H。(也可不写) 160H 也可不写) 字符串:用引号括起来的1 个或多个字符 。 字符串:用引号括起来的 1 个或多个字符。 如 ‘ ERROR!’, ’a’, 汇编时被翻译成对应的ASCII ERROR!’ 汇编时被翻译成对应的 ASCII 码45H,52H,52H,4FH,52H,21H和61H。 H,52H,52H,4FH,52H,21H 61H
指令助记符——8086助记符、伪指令 指令助记符——8086助记符、伪指令 操作数——即指令的操作对象 操作数——即指令的操作对象
对指令性语句——0 对指令性语句——0,1,2个 对指示性语句——根据需要而定 对指示性语句——根据需要而定 操作数之间以逗号分隔 操作数可以是:寄存器、存储单元、常数或表达式 操作数可以是:寄存器、存储单元、常数或表达式 例如:AX,[DI+BX+10],200,16*8+TABLE,等等 – – – –
相关文档
最新文档