32位汇编上机指导
汇编语言程序设计及上机指导第3章指令格式与寻址方式
高地址
(2)寄存器间接寻址
返回
操作数在存储器中,而操作数的有效地址EA却在指定的寄存器中,
即 EA=[寄存器]
1)16位寻址时,EA放在SI、DI、BP或BX中。
若以SI、DI、BX间接寻址,则默认操作数在DS段中。
MOV AX,[SI]
;默认DS为段基址
若以寄存器BP间接寻址,则默认操作数在堆栈段中。
BX,BP
SI,DI
不用该分量,默 认为1
0,8,16(位)
所有32位通用寄存器
除ESP外的所有32位 通用寄存器
1,2,4,8(倍)
0,8,32(位)
所有32位/64位通用寄存 器(16个)
所有32位/64位通用寄存 器(16个)
1,2,4,8(倍)
0,8,32,64(位)
如:ADD AX,20[BX][SI]
MOV ECX,[EBP+50] ;也可写成 MOV ECX,50[EBP]
MOV DX,[EAX+BASE] ;也可写成 MOV DX,BASE[EAX]
BASE是符号常量或变量
MOV ECX,[EBP+50]指令执行时,EBP寄存器内容为3000H,再加上 位移量50H之和为3050H,然后把由SS寄存器寻址的段中的3050H 单元的32位数据传送给ECX。
最常用的数据传送指令MOV的格式为: MOV DEST,SRC ;将源操作数SRC的值传送至目的操作数
【例】 MOV EAX,EBX ;将EBX的值送给EAX
2019/6/4
3.2.2 有效地址的概念
返回
在80X86系列CPU中,内存单元的地址由两部分组成:
段基地址和段内偏移地址(也称段内偏移量)
32位汇编语言程序设计部分课后习题答案
3.1 简答题-1
(1)如何修改“MOV ESI, WORD PTR 250”语句使其 正确?
• 删除“WORD PTR”即可
(2)为什么说“XCHG EDX,CX”是一条错误的指令?
32位汇编语言习题解答
课件制作: 钱晓捷
钱晓捷,32位汇编语言程序设计,机械工业出版社
第1章习题:汇编语言基础
1.1 简答题(1、3、6、7、8) 1.2 判断题(1、6、7、8、9) 1.3 填空题(3、4、5、7、10) 1.9、1.13、1.15、1.16
1.1 简答题-1
(1)哪个处理器的指令系统成为Intel
• 没有
(8)汇编语言的标识符大小写不敏感意味着什么?
• 表示字母大小写不同、但表示同一个符号
4
习题解答
1.2 判断题
1)EAX也被称为累加器,因为它使用最频繁。
• 对,EAX中的A来自英文累加器(Accumulator)
6)处理器的传送指令MOV属于汇编语言的执行性语句
•对
7)汇编语言的语句由明显的4部分组成,不需要分隔 符区别。
13,10
byte
'---+-------------------------------',
13,10
byte '20 |',20h,20h,21h,20h,22h,20h,23h,20h,
24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20h
byte 2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h,
• 寄存器寻址,立即数寻址
(9)已知ESI=04000H,EBX=20H,指令“MOV EAX, [ESI+EBX*2+8]”中访问的有效地址是__________。
32位汇编语言学习笔记3leal和算术运算指令
32位汇编语言学习笔记3leal和算术运算指令32位汇编语言学习笔记在学习汇编语言的过程中,我们已经了解了一些基本指令和寄存器的用法。
本文将继续介绍两个重要的指令:leal指令和算术运算指令。
通过深入了解和学习这两个指令,我们将更好地理解和掌握汇编语言编程的技巧和方法。
一、leal指令leal指令用于将一个有效地址(Effective Address,EA)加载到目标操作数中。
它的一般格式为:leal Source, Destination。
在这个指令中,Source表示源操作数,可以是寄存器、内存或立即数。
Destination表示目标操作数,只能是寄存器。
leal指令在源操作数的基础上进行计算,将计算结果存储到目标操作数中。
下面是一些leal指令的示例:1. leal (%eax,%ebx,4), %edx这条指令将地址(%eax + %ebx * 4)的结果存储到%edx寄存器中。
其中,%eax是个基址寄存器,%ebx是个变址寄存器,4表示缩放因子。
2. leal -8(%ebp), %ecx这条指令将地址(%ebp - 8)的结果存储到%ecx寄存器中。
其中,%ebp是个基址寄存器,-8是个偏移量。
需要注意的是,leal指令只能进行地址计算,并将结果存储到目标操作数中,不能进行实际的加载操作。
二、算术运算指令在汇编语言中,算术运算指令主要用于进行数值的计算和操作。
常见的算术运算指令包括add、sub、mul、div等。
这些指令可以对数据寄存器和内存中的数据进行四则运算。
下面是一些常用的算术运算指令及其示例:1. add指令:用于将两个操作数相加,并存储结果到目标操作数中。
一般格式为:add Source, Destination。
示例:add %eax, %ebx这条指令将%eax和%ebx寄存器中的值相加,结果存储到%ebx中。
2. sub指令:用于将第一个操作数减去第二个操作数,并将结果存储到目标操作数中。
汇编语言程序设计实验指导
汇编语言程序设计实验指导【实验提要】以下列举的10个实验,都是以Intel的8086及后续系列微处理器的指令系统为核心,采用宏汇编工具MASM6. X以及调试工具DEBUG或DEBUG32,针对本教材所述内容进行相关的上机实践。
旨在帮助学生加深认识和理解理论教学知识,通过大量的上机实验熟悉8086 CPU的指令功能、用途和使用技巧,进而提高汇编语言程序设计的能力。
(带*号的为选作内容)实验一调试工具DEBUG的应用实验目的通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG的功能;2、DEBUG命令: A,D,E,F,H,R,T,U的使用;3、BCD码、ASCII码及用十六进制数表示二进制码的方法;4、寄存器: AX,BX,CX,DX,FLAGS,IP。
内容及步骤注:本次实验可以参照教材上关于DEBUG的叙述内容进行。
一、DEBUG 命令使用1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。
5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。
6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H (2)23H,45H (3)AB,3045H注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。
windows环境下32位汇编语言程序设计附书代码
windows环境下32位汇编语言程序设计附书代码汇编语言是一种底层计算机语言,用于编写与计算机硬件直接交互的程序。
在Windows环境下,可以使用32位汇编语言进行程序设计。
本文将介绍一些常见的32位汇编语言程序,并附带相关的代码示例。
1.程序的基本结构:在32位汇编语言中,程序的基本结构由三个部分组成:数据段、代码段和堆栈段。
数据段用来声明和初始化程序中使用的全局变量和常量。
例如,下面的代码段声明了一个全局变量message,存储了一个字符串。
```data segmentmessage db 'Hello, World!',0data ends```代码段包含了程序的实际执行代码。
下面的代码段使用`mov`指令将message变量中的字符串存储到寄存器eax中,并使用`int 21h`来调用MS-DOS功能1来显示字符串。
```code segmentstart:mov eax, offset messagemov ah, 09hint 21hmov ah, 4chint 21hcode ends```堆栈段用来存储函数调用过程中的局部变量和返回地址。
2.入栈和出栈操作:在程序中,我们经常需要使用堆栈来保存和恢复寄存器的值,以及传递函数参数和保存函数返回值。
以下是一些常用的堆栈操作指令: ```push reg ;将reg中的值压入堆栈pop reg ;将堆栈顶部的值弹出到reg中```下面的示例演示了如何使用堆栈来保存和恢复寄存器的值:```code segmentstart:push eax ;将eax保存到堆栈mov eax, 10 ;设置eax的值为10pop ebx ;将堆栈顶部的值弹出到ebxadd eax, ebx ;将eax和ebx相加int 3 ;调试中断,用于程序的暂停mov ah, 4chint 21hcode ends```3.条件判断和跳转指令:汇编语言中的条件判断和跳转指令用于根据条件的成立与否来改变程序的执行流程。
汇编语言上机过程(自学)
附加1 用DEBUG验证程序段
通常汇编教学中,汇编程序结构会在指令系 统后面讲,学生在学习指令系统时由于没有讲汇 编程序结构而无法编写汇编程序来加深对汇编指 令的理解,因此,在这里我们通过2个例子,介 绍使用DEBUG调试工具编写程序段来学习汇编 指令。 有关DEBUG的常用命令的用法请参看教材的 P32 2.5 DEBUG主要命令
为 1时 OV DN EI NG ZR AC PE CY
为 0时 NV UP DI PL NZ NA PO NC
再举一个有访存操作的例子 MOV SI, 0050H MOV DI, 0100H MOV CX, 5 CLD REP MOVSB ; (DS)=2000H ; (ES)=3000H
1)先用A命令输入程序
2)用R命令修改DS和ES寄存器到约定值 DS的原始值 输入的修改值
3)用D命令查看源数据区和目标数据区
4)用E命令初始化源数据区后再用D命令检查源数据 区和目的数据区
5)单步跟踪执行程序
6)执行后检查源数据区和目标数据区
注意,用A命令输入指令时,如果输入错误debug会立 即指出错误和位置。地址不会变化,以便用户修正指 令。
标志位
这是MOV BX,[SI]的执行结果
这是还未执行的下 一条指令
3)对于系统功能调用,可以用G命令来自置断点执行, 也可以用P命令跳过过程与系统功能服务程序。
设断点执行,断点设在INT 21H的后一句 INT 21H输出的一个字符
注意:DEBUG只支持16位汇编调试,如果要编写32位 汇编程序,需要用MASM 6.11汇编和连接,用 CodeView软件查看执行代码。但MASM 6.11中带的 CodeView 4.01可以查看32位程序的执行代码,不能进 行单步调试。要调试可以考虑使用SoftICE软件。 另外,VC嵌入汇编可以支持80486的所有指令,也支 持32位汇编。
汇编语言上机环境及基本操作
汇编语言上机环境及基本操作汇编语言是一种低级语言,它直接面向硬件,可以直接访问计算机的底层资源。
为了学习和实践汇编语言,我们需要了解如何搭建汇编语言上机环境以及其基本操作。
本文将介绍汇编语言上机环境的安装和基本操作的步骤,并给出一些示例。
1. 汇编语言上机环境的安装在搭建汇编语言的上机环境之前,我们首先需要确认计算机的操作系统。
通常,我们可以在Windows操作系统上进行汇编语言的开发和调试。
下面是汇编语言上机环境的安装步骤:1.1 下载汇编语言开发工具汇编语言开发工具有很多种,比如MASM、NASM等。
根据个人的喜好和需求选择合适的工具进行下载。
1.2 安装汇编语言开发工具双击下载文件并按照提示完成安装过程。
一般来说,安装过程中可使用默认配置,无需特殊设置。
1.3 配置环境变量配置环境变量可以使得我们在任意路径下都可以运行汇编语言代码。
找到系统环境变量中的"Path"变量,添加汇编语言开发工具的安装路径。
例如,如果您选择了MASM,将其安装路径添加到"Path"变量中即可。
安装好汇编语言开发工具后,我们就可以开始进行汇编语言的实践了。
2. 汇编语言的基本操作接下来我们将介绍汇编语言的一些基本操作,包括编写代码、汇编、链接和运行等。
2.1 编写汇编语言代码打开一个文本编辑器(如记事本),编写汇编语言的代码。
汇编语言与高级语言相比,语法更为底层,需要对计算机的底层结构有一定的了解。
可以参考相关教材或者网络资源,编写简单的汇编语言代码。
2.2 汇编将编写好的汇编语言代码保存为.asm文件。
然后,打开命令提示符(或者使用汇编语言开发工具自带的命令行工具),进入.asm文件所在目录,并执行如下命令进行汇编:> asm 文件名.asm汇编成功后,将生成相应的.obj文件。
2.3 链接汇编语言代码中可能会引用一些外部的库文件,我们需要将这些库文件与生成的.obj文件进行链接。
32位汇编指令
用OD和CE,总不断找汇编资料,解读指令,实在是累。
总算找到篇比较完整的资料,与大家分享。
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
第6章32位指令及其编程
第6章
6.1.1 32位寄存器组
8个32位通用寄存器: EAX EBX ECX EDX ESI EDI EBP ESP 6个16位段寄存器: CS SS DS ES FS 32位指令指针寄存器:EIP 32位标志寄存器:EFLAGS 其他的32位系统用寄存器
基 在 础 原 上 GS 有 扩 16 展 成位 为寄 32 存 位器
第6章
条件转移
转移范围可达到32位全偏移
Jcc label ;cc为真,转移到label指定的段内偏移地址处
JECXZ label ;ECX=0,转移到label指定的段内偏移地址处 LOOP/LOOPZ/LOOPNZ label ;循环指令,32位段采用ECX作为计数器
转移范围仍为短转移
例6.1
字节交换指令
BSWAP r32 ;将32位通用寄存器值的第 1和4字节、第2和3字节互换
mov eax,00112233h bswap eax
;EAX=00112233h ;EAX=33221100h
第6章
送CF标志,然后对那一位复位 bt eax,5 ;EAX=12345678h,CF←1=EAX的D5位
BTSbtc eax,10 ;EAX=12345278h,CF←1=EAX的D10位 dest,src ;把dest中由src指定的位
送CF标志,然后对那一位置位 btr eax,20 ;EAX=12245278h,CF←1=EAX的D20位
第6章
6.1.2 32位存储器寻址方式
32位有效地址= 基址寄存器+(变址寄存器×比例)+位移量
基址寄存器——任何8个32位通用寄存
器之一 变址寄存器——除ESP之外的任何32位 通用寄存器之一 比例——可以是1 / 2 / 4 / 8 位移量——可以是8 / 32位值
罗云彬的Win32汇编教程
罗云彬的Win32汇编教程之一Win32汇编的环境和基础1.32位环境简介在Dos下编汇编程序,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己修改中断向量表来截获中断等,对其他操作也是如此,如我们对键盘端口直接操作就可以把键盘屏蔽掉,可以这样来描述Dos系统:系统只有一个特权级别,在编程上讲,任何程序和操作系统都是同级的,所以在Dos下,一个编得不好的程序会影响其他所有的程序,如一个程序把键盘口中断关掉了,所有程序就都不能从键盘获得键入的数据,直到任何一个程序重新打开键盘为止,一个程序陷入死循环,也没有其他程序可以把它终止掉。
Dos下的编程思路是“单任务”的,你只要认为你的程序会按照你的流程一步步的执行下去,不必考虑先后问题(当然程序可能会被中断打断,但你可以认为它们会把环境恢复,如果中断程序没有把环境恢复,那是他们的错)。
在内存管理方式上,Dos汇编和Win32汇编也有很多的不同:Dos工作在实模式下,我们可以寻址1M 的内存,寻址时通过段寄存器来制定段的初始地址,每个段的大小为64K,超过1M的部分,就只能把他作为XMS使用,也就是说,只能用作数据存放使用而无法在其中执行程序。
而Windows在保护模式下执行,这里所有的资源对应用程序来说都是被“保护”的:程序在执行中有级别之分,只有操作系统工作在最高级--0级中,所有应用程序都工作在3级中(Ring3),在Ring3中,你无法直接访问IO端口,无法访问其他程序运行的内存,连向程序自己的代码段写入数据都是非法的,会在Windows的屏幕上冒出一个熟悉的蓝屏幕来。
只有对Ring0的程序来说,系统才是全开放的。
在内存方面,Windows使用了处理器的分页机制,使得对应用程序来说,所有的内存都是“平坦”的,你不必用一个段寄存器去指定段的地址,因为在保护模式下,段寄存器的含义是不同的(可以参见80386手册方面的书籍),你可以直接指定一个32位的地址来寻址4GB的内存。
汇编语言上机指导及例示(川大微机原理实验资料和内容以及MASM使用方法)
汇编语言上机指导及例示、习题从如何建立源文件到进行调试作下简要的介绍,并配例题说明。
由于本人水平有限,在下文在如有错误及可以进一步修改的地方请大家指出汇编语言上机过程:一、上机前的软件准备:MS-DOS操作系统(如:MSDOS6.22 , MSDOS7.0 等)文本编辑器(如: , TURBO.EXE , TC.EXE , C.EXE 等)汇编程序(如:MASM.EXE , ASM.EXE 等)连接程序(如:LINK.EXE 等)调试程序(如:DEBUG.EXE 等)二、汇编程序建立过程:a.建立汇编源程序─通过───→b.编译为目标文件─↓┬─→d.连接为可执行文件↑│ c.不通过,重新修改(语句错误)↓├──────────────────────┘↓↑ f.不正确,用调试工具调试,重新修改(逻辑错误)↓└────────────────────────────←e运行↓正确g.完成三、现在对(二)的每一个标有字母的过程(PROCEDURE)进行详细说明PROCEDURE a:建立汇编源程序(即:建立文件名.asm)这个过程就相当于我们在纸上编写源程序代码一样,只不过是将纸变为了计算机,这个过程也称源代码录入。
将源程序代码录入计算机的方法很多,下面将介绍具体方法。
1.通过MD-DOS自带的EDIT.EXE文本编辑器进行输入,在DOS提示符下键入:EDIT回车,这时如果你系统内可调用时,EDIT的操作画面便会出现在屏幕上,你就可在提示下进行录入了,当录入完毕后,选择存盘并给你输入的文件起一个文件名,形式:filename.asm ;(其中filename为你起的文件名,由1-8个字符组成),asm 是为汇编程序识别而必须加上去的,不可更改。
存盘后在DOS下可用DOS命令DIR来查看,如果看到了所存的文件存在,就可以进行进程b。
2.如果你的系统中没有EDIT,也可用你所熟悉的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。
Win32汇编语言简明教程
第一课基本概念我们先假设您已知道了如何使用MASM。
如果您还不知道的话,请下载win32asm.exe ,并请仔细研读其中所附带的文档资料。
好,如果您已准备就绪,我们这就开始吧!理论:WIN32 程序运行在保护模式下的,保护模式的历史可以追溯到 80286。
而今80286 已成为了历史。
所以我们将只把精力集中于 80386 及后续的X86 系列CPU。
Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是说每一个应用程序都拥有其相互独立的 4GB 地址空间,当然这倒不是说它们都拥有 4GB 的物理地址空间,而只是说能够在 4GB 的范围内寻址。
操作系统将会在应用程序运行时完成 4GB 的虚拟地址和物理内存地址间的转换。
这就要求编写应用程序时必须格守 Windows 的规范,否则极易引起内存的保护模式错误。
而过去的 Win16 内存模式下,所有的应用程序都运行于同一个 4GB 地址空间,它们可以彼此"看"到别的程序的内容,这极易导致一个应用程序破坏另一个应用程序甚至是操作系统的数据或代码。
和 16 位 Windows 下的把代码分成 DATA,CODE 等段的内存模式不同,WIN32 只有一种内存模式,即 FLAT 模式,意思是"平坦"的内存模式,再没有 64K 的段大小限制,所有的 WIN32 的应用程序运行在一个连续、平坦、巨大的 4GB 的空间中。
这同时也意味着您无须和段寄存器打交道,您可以用任意的段寄存器寻址任意的地址空间,这对于程序员来说是非常方便的,这也使得用32位汇编语言和用C语言一样方便。
在Win32下编程,有许多重要的规则需要遵守。
有一条很重要的是:Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,这样当您要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们,一个最显著的应用例子就是 Windows 的CallBack 函数中。
汇编语言上机试验指导
作实验2【1】.有空加作实验【4】(1).实验2算术及位串处理程序【1】.在数据段预先存放16个十六进制数的ASCII码,把BX中的四位十六进制数,从左到右用查表的方法找到对应数位的ASCII码,并取出显示出来。
要求见书:参考程序:data segmentasc db30h,31h,32h,33h,34h,35h,36h,37h,38h,39hdb41h,42h,43h,44h,45h,46hdata endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov cl,4rol bx,clmov si,bxand si,0fhmov dl,[asc+si]mov ah,2int21hrol bx,clmov si,bxand si,0fhmov dl,[asc+si]mov ah,2int21hmov ah,4chint21hcode endsend start【2】用字符串处理指令编制程序,处理字符串的比较和查找,显示结果。
要求:(1)字符串的比较程序中,一个字符串在数据段定义,另一个字符串在程序执行时从键盘输入,必须定义键盘缓冲区。
并指出不相等的位置。
参考书上例3.51,题目改为MESS2定义为从键盘输入缓冲区,键盘输入缓冲区定义:mess2DB9,?,9DUP(?)例3.51在数据段中有一个长度为19的字符串MESS1,在附加段中有一个长度为19的字符串MESS2,比较它们是否相等。
若相等显示‘Y’,否则显示‘N’。
编制程序如下所示。
data segmentmess1db‘computer software$’data endsext segmentmess2db‘comkuter software$’ext endscode segmentassume cs:code,ds:data,es:extstart:mov ax,datamov ds,axmov ax,extmov es,axlea si,mess1lea di,mess2mov cx,19cldrepe cmpsbjz yes;如果zf=1跳转到标号yesmov dl,‘n’jmp disp;跳转到标号dispyes:mov dl,‘y’disp:mov ah,2int21hmov ah,4chint21hcode endsend start实验3分支程序设计实验目的:掌握分支与循环程序等基本编程方法。
32位微机原理上机实验报告:基本IO接口电路设计实验
西北工业大学明德学院实验报告实验项目微机原理及应用班级 121204姓名田家豪王辰硕学号 ****** ******指导老师伍明高时间 2015-4-14实验题目基本I/O接口电路设计实验实验目的(1) 掌握基本I/O接口电路的设计方法。
(2) 熟练汇编语言I/O端口操作指令的使用。
实验内容利用三态缓冲器74LS245、锁存器74LS374设计微机总线和外部设备的数据通道,实现微机对外部输入数据的读取和对输出数据的输出。
用开关及LED显示单元的开关和数据灯作为输入和输出显示设备,将读到开关的数据显示在数据灯上。
实验原理1.输入接口设计输入接口一般用三态缓冲器实现,外部设备输入数据通过三态缓冲器,通过数据总线传送给微机系统。
74LS245是一种8通道双向的三态缓冲器。
DIR引脚控制缓冲器数据方向,DIR为1表示数据由A[7:0]至B[7:0],DIR为0表示数据由B[7:0]至A[7:0]。
G引脚为缓冲器的片选信号,低电平有效。
2.输出接口设计输出接口一般用锁存器实现,从总线送出的数据可以暂存在锁存器中。
74LS374是一种8通道上沿触发锁存器。
D[7:0]为输入数据线,Q[7:0]为输出数据线。
CLK引脚为锁存控制信号,上升沿有效。
当上升沿到时,输出数据线锁存输入数据线上的数据。
OE引脚为锁存器的片选信号,低电平有效。
3.输入输出接口设计用74LS245和74LS374可以组成一个输入输出接口电路,既实现数据的输入又实现数据的输出,输入输出可以占用同一个端口。
是输入还是输出用总线读写信号来区分。
总线读信号IOR 和片选信号CS相“或”来控制输入接口74LS245的使能信号G。
总线写信号IOW和片选信号CS 相“或”来控制输出接口74LS374的锁存信号CLK。
实验系统中基本输入输出单元就实现了两组这种的电路。
实验说明及步骤本实验实现的是将开关K[7:0]的数据通过输入数据通道读入CPU的寄存器,然后再通过输出数据通道将该数据输出到数据灯显示,该程序循环运行,直到按动键盘上任意按键再退出程序。
汇编上机(汇编语言步骤)
2)汇编(MASM或ASM)源程序
以命令方式启动汇编程序时,须在DOS下打入下列格式命令:
MASM<源文件>,[<目标文件>],[<列表文件>],[<交叉参考文件>]
MASM中的主要文件类型
汇编源程序(.ASM)
目标代码文件(.OBJ)
列表文件(.LST):列出源程序和机器语言程序
清单,并给出符号表。使调试程序更加方便
交叉索引文件(.CRF):列出了源程序中定义的符 号(包括:标号、变量等)和程序中引用这些符号的 情况(包括符号定义所在的行号、引用符号的行号 等)。
3)程序连接
连接程序LINK用来连接汇编程序生成的目标代码文件
(.OBJ)以及指定的库文件,产生一个可执行的装入文件 (.EXE)。
以命令方式启动连接程序时,必须在DOS下输入如下格式
命令: LINK<目标代码模块表>,[<列表文件名>],[<库文件名表>]
4)执行程序
C:>example(扩展名EXE可缺省)
5)调试程序
调试程序DEBUG是专为宏汇编语言设计的一种调试
手段,是我们必须掌握的一种调试工具。
汇编语言的程序一般要经过以下步骤汇编语言上机步骤汇编语言上机步骤源程序需要用文本编辑器进行编写在dos下可以使用peedit或ቤተ መጻሕፍቲ ባይዱordstar进行编写
汇编语言上机步骤
汇编语言的程序一般要 经过以下步骤
编辑 汇编(MASM或ASM)
连接(LINK)
调试(DE-BUG)
1)编辑源程序 源程序需要用文本编辑器进行编写,在DOS下,可以 使用PE、EDIT或WORDSTAR进行编写;Windows 下,可以使用记事本或其他文本编辑器编写。
汇编语言试验指导
实验指导一.上机实验的一般步骤和要求:1.上机前对选定的实验题应有所了解,并写好程序。
2.上机过程中对重要方法和步骤、问题和结果应有记录。
3.所有程序原则上都要通过调试手段运行。
4.实验后进行分析和总结,给出实验报告。
二.实验报告的内容一般有:1.实验题的内容及要求。
2.思路和方法、算法描述及有注释和说明的程序清单。
3.程序调试和运行的重要步骤、问题和结果。
4.分析和总结。
三.实验环境的建立参看第二章第一节。
通常在WINDOWS XP系统下。
如果其他操作系统(如WIN 7),不支持汇编程序工作,可安装Masm for Windows集成实验环境asm20125(支持Win2000、WinXP、WinVISTA、WIN7等操作系统)。
/实验1 上机过程及程序调试实验目的:1.通过第二章两个简单实例认识汇编语言程序,初步了解程序格式;段定义;标号;DOS系统功能;操作数;指令;说明语句等作用。
2.掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤。
即编辑、汇编、连接。
了解汇编语言的系统工作文件和工作环境。
理解汇编程序和连接程序的作用。
理解列表文件内容。
3.初步了解程序的运行和调试方法。
学会使用DEBUG主要命令和常用的DOS命令。
实验内容:【1】编辑第二章两个简单实例,通过汇编、连接。
【2】用DEBUG对hello程序进行调试。
问题:(1) 该程序在内存中的起始地址是多少?结束地址是多少?共占几个字节?(2) 0B63:0008表示什么意思?(3) 程序中定义的串‘HELLO, WORLD !$’在内存中的起始地址是多少?请用DEBUG命令显示该串。
(4) 如果用带有断点的G命令运行该程序,写出命令。
(5) 用P命令单步执行程序。
(6) 用T命令跟踪程序,在跟踪执行INT 21时出现什么问题?(7) 用A命令在偏移地址100H处建立该段程序,并运行。
(8) 用W命令把该段程序写成文件,再调入。
实验2 算术及位串处理程序实验目的:掌握多数位的算术运算、移位操作、字符串操作等程序的设计,学习使用分支与循环等基本编程方法,熟练使用DEBUG。
【汇编语言】32位指令及其编程(可编辑)
封面第六章 32位指令及其编程第六章32位指令及其编程概述 6.1 32位指令运行环境6.2 32位扩展指令 6.3 32位指令的程序设计 6.4 32位新增指令 6.5 用汇编语言编写 32位WINDOWS应用程序概述1 概述 32位指令系统以80386 CPU 为基础,其指令集可分为整数指令集(16位整数指令集、32位整数指令集)和浮点指令集,16位整数指令集全兼容8086 CPU。
1996年,Intel推出MMX Pentium,首次增加了MMX (多媒体扩展)指令集,提高了CPU对多媒体数据的处理能力。
1999年,Intel推出Pentium Ⅲ,增加了SSE指令集(数据流SIMD扩展指令,SIMD为MMX指令集的关键技术,意为“单指令流多数据流”)。
2000年,Intel推出Pentium4,又增加SSE2指令集,增强了处理器对3-D图象、视频编码解码、语音识别等数据的处理能力。
概述2 本章主要介绍80386的32位整数指令集,及其汇编语言程序设计,对386以后推出的CPU新增指令(0>.、 .、.)简单介绍。
6.5 节简单介绍如何使用汇编语言编写WINDOWS应用程序。
本章应重点掌握: 32位编程环境 32位寻址方式 32位指令编程方法 6.1 32位指令运行环境 6.1 32位指令运行环境补充.386的工作方式及16位段和32位段 . 寄存器组 . 寻址方式 .机器代码格式 386的工作方式:实方式补充 386的工作方式实地址方式:实方式(Real Mode)与8086/80186的工作方式以及80286的实地址方式具有相同的基本结构。
不使用386的优先级分级制,所有程序(DOS和应用程序都工作在0级(特权级)。
32位x86 CPU只能寻址1MB物理存储器空间,分段最大64KB,采用16位逻辑段。
32位x86 CPU可以使用32位寄存器和32位操作数,也可以采用32位寻址方式。
32位汇编语言01
(3)段式存储模型(Segmented Memory Model)
23
2. 工作方式
(1)保护方式(Protected Mode)
IA-32处理器固有的工作状态 具有强大的段页式存储管理和特权与保护能力 使用全部32条地址总线,可寻址4GB物理存储器 使用平展或段式存储模型 虚拟8086方式支持实地址8086软件 可以进行32位处理的快速8086 只能寻址1MB物理存储器空间,每个段不超过64KB 可以使用32位寄存器、32位操作数和32位寻址方式 只能支持实地址存储模型
最大存储单元
8086处理器支持1MB存储器:00000H~FFFFFH IA-32处理器支持4GB存储器:00000000H~FFFFFFFFH
• 操作系统利用存储管理单元进行存储管理,程序并
不直接寻址物理存储器 • IA-32 处理器提供 3 种存储模型,用于程序访问存储 器
示意图
21
第1章 汇编语言基础
31 16 15 0
IP EIP
17
第1章 汇编语言基础
4. 段寄存器
• 段(Segment )是用于安排相关代码或数据的
一个主存区域 • 段寄存器表明某个段在主存中的位置 • 6个16位段寄存器:CS DS SS ES FS • 应用程序主要涉及3类段
GS
代码段(Code Segment) 存放程序中指令代码 数据段(Data Segment) 存放当前运行程序所用数据 堆栈段(Stack Segment) 指明程序使用的堆栈区域
1.1 英特尔80x86处理器
Intel 64处理器
Intel 8086
32位汇编语言取补
32位汇编语言取补在计算机中,二进制数是最基本的数字表示方式。
二进制数由0和1组成,对应计算机中的电子开关状态,是计算机底层运算的基础。
在32位汇编语言中,二进制数的补码是常见的操作之一,本文将对32位汇编语言中的取补操作进行详细介绍。
一、补码的概念在计算机中,对于有符号数,一般采用补码表示。
补码是将原码按位取反后加1得到的数值,如果该数为正数,则补码等于原码;如果该数为负数,则补码是该数的绝对值的原码按位取反后加1。
例如,-5的原码为10000101,其补码为11111011。
二、32位补码的取法在32位汇编语言中,32位补码可以通过以下操作取得:1.将原数的每一位(包括符号位)取反2.将取反后的数值加1例如,假设要计算-5的32位补码,步骤如下:1.将-5的原码10000101按位取反得到011110102.将取反后的数值加1,得到补码11111011三、32位补码的应用在计算机底层运算中,补码的应用非常广泛。
例如,进行加减法时,可以将减数的补码加到被减数上,即可进行减法运算。
同时,计算机中的逻辑运算、移位运算等也都需要用到补码操作。
四、32位补码的实现在32位汇编语言中,取补操作可以通过以下指令实现:NOT 指令:将操作数按位取反ADD 指令:将取反后的数值加1例如,以下代码可以实现将eax寄存器中的数值取补:NOT EAX ;将eax寄存器中的数值按位取反ADD EAX,1 ;将取反后的数值加1,得到32位补码五、总结32位汇编语言中的取补操作是计算机底层运算的基础之一。
通过将原数的每一位取反后加1,可以得到该数的32位补码。
在计算机底层运算中,补码的应用非常广泛,例如进行加减法、逻辑运算、移位运算等都需要用到补码操作。
在32位汇编语言中,取补操作可以通过NOT指令和ADD指令实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3/7
(验证习题 验证习题3.20、 3.21 、 3.26) 验证习题 、
4/7
实验一 熟悉汇编语言开发环境与工具
二、实验内容
下面各条指令是否有错?编写一完整的程序进行验证, 4. 下面各条指令是否有错?编写一完整的程序进行验证, 详细记录汇编程序给出的错误信息。说明具体错误原因。 详细记录汇编程序给出的错误信息。说明具体错误原因。 mov mov mov mov mov add mov ecx,dx al,300 , 20h,ah es,1234h es,ds ax,[esi][edi] [edx],10
实验一 熟悉汇编语言开发环境与工具
二、实验内容
3. 编写一完整的程序,单步执行。记录每条语句执行后寄 编写一完整的程序,单步执行。 存器AL的值和标志位 的值。 存器 的值和标志位 CF、 ZF、 SF、 OF的值。 、 、 、 的值 mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc al
3/8
循环程序设计实验 实验三 循环程序设计实验 二、实验内容
numbers的定义 的定义: 2. Fibonacci numbers的定义: f1=1,f2=1, fn= fn-1 + fn-2 n>=3 f1=1,f2=1, fn- fn编程输出Fibonacci numbers的前 的前3 编程输出Fibonacci numbers的前30项。
6/7
实验二 简单分支程序设计实验
二、实验内容 4.编程实现习题4.11和4.21 。 4.编程实现习题 编程实现习题 和
7/7
实验二 简单分支程序设计实验
回答问题: 回答问题:
在多分支结构中, 1. 在多分支结构中,为什么必须要有无条件转移 指令? 指令? 2.在汇编语言中 2.在汇编语言中while和do while循环结构是 否可变换为一种结构?如何做? 否可变换为一种结构?如何做? 高级语言中逻辑表达式 逻辑表达式在汇编语言中是如何实 3. 高级语言中逻辑表达式在汇编语言中是如何实 现的? 现的?
〔习题4.17〕 习题 〕
6/8
循环程序设计实验 实验三 循环程序设计实验
二、实验内容
5.有一个首地址为 5.有一个首地址为string的字符串 ,分别 有一个首地址为 的字符串 统计string中空格、英文字母、数字和其它 中空格、 统计 中空格 英文字母、 字符的个数并输出。 字符的个数并输出。
1/8
循环程序设计实验 实验三 循环程序设计实验 一、实验目的
指令。 1. 掌握 loop 指令。 2. 掌握while和do while循环结构。 掌握while和 while循环结构 循环结构。 掌握伪指令.while和 .repeat。 3. 掌握伪指令.while和 .repeat。 4. 掌握一维数组处理的常用算法;迭代与枚 掌握一维数组处理的常用算法; 举等算法。 举等算法。
思考题: 思考题:在不产生溢出的情况下n的最 大值是多少? 大值是多少?
4/8
循环程序设计实验 实验三 循环程序设计实验
二、实验内容
3. 有一个首地址为 有一个首地址为array的20个有符号的双字数 的 个有符号的双字数 组,编程分别求出正数的和与负数的和并输 出。
思考题:将求和改为求最大值与最小值。 思考题:将求和改为求最大值与最小值。
32位汇编语言程序设计 32位汇编语言程序设计 实验指导
2008年 2008年3月
西安理工大学计算机科学与技术系
实验一 熟悉汇编语言开发环境与工具
一、实验目的
掌握汇编语言程序上机过程。 1. 掌握汇编语言程序上机过程。 掌握汇编语言程序结构。 2. 掌握汇编语言程序结构。 掌握教科书表2.3中常用 子程序的使用方法(P48 。 中常用I/O子程序的使用方法 3. 掌握教科书表 中常用 子程序的使用方法 P48)。 了解汇编程序与连接程序的功能,列表文件的意义。 4. 了解汇编程序与连接程序的功能,列表文件的意义。 掌握VC IDE下DEBUG调试汇编语言程序的方法 调试汇编语言程序的方法。 5. 掌握VC IDE下DEBUG调试汇编语言程序的方法。
2/8
实验四 子程序与操作系统功能调用
二、实验内容
1.编写一个求 的子程序 利用它求1!+2! +3! +4! 1.编写一个求n!的子程序,利用它求 编写一个求 的子程序, +5! +6! +7! +8! 的和并输出。 的和并输出。 要求参数的传递分别采用:寄存器传递、 要求参数的传递分别采用:寄存器传递、全 局变量传递,堆栈传递三种不同的方法实现。 局变量传递,堆栈传递三种不同的方法实现。分 析说明三种不同的参数的传递特点。 析说明三种不同的参数的传递特点。
2/7
实验二 简单分支程序设计实验
二、实验内容
1.编写程序,计算下面函数的值并输出。 1.编写程序,计算下面函数的值并输出。 编写程序
2 x s = 3 x 4 x
( x < 0) (0 <= x <= 10 ) x > 10
3/7
实验二 简单分支程序设计实验
二、实验内容
2.输入一个年份 调用 子程序),判断是否 2.输入一个年份(调用readuid子程序 判断是否 输入一个年份 调用readuid子程序 是闰年. 是闰年 提示:采用伪代码描述如下: 提示:采用伪代码描述如下: read year if (year mod 4=0 and year mod 100 <>0) or (year mod 400=0) then print year ,'is leap year. ' 'is else print year ,'is not leap year. ' 'is
提示:采用div指令把整数分解为单个的数字,并将它们组 div指令把 提示:采用div指令把整数分解为单个的数字, 合成一个新的整数。
8/8
循环程序设计实验 实验三 循环程序设计实验
二、实验内容
7.编写程序,求出所有满足勾股定理且边长 不 7.编写程序, 编写程序 大于500的直角三角形。 的直角三角形。 大于 的直角三角形 提示:采用三重循环,用穷举法求解。 提示:采用三重循环,用穷举法求解。
三角形、等边三角形。 三角形、等边三角形。
5/7
实验二 简单分支程序设计实验
二、实验内容 3. 采用无条件和条件转移指令构造while和
பைடு நூலகம்
do while循环结构,完成下面的求和任务并 循环结构, 为双字)。 输出sum(sum 为双字 。
sum=1+2+3+….+n
思考题:假设sum 为双字无符号整数,在和不溢出 思考题:假设sum 为双字无符号整数, 的情况下求出n的最大值;输出sum和 的值。 的情况下求出n的最大值;输出sum和n的值。
实验一 熟悉汇编语言开发环境与工具
5/7
二、实验内容 6. 采用小端方式多字节数据在内存中是如何存 采用小端方式 小端方式多字节数据在内存中是如何存 放的?编写代码进行验证。要求记录程序运 放的?编写代码进行验证。 行时各个变量的首地址及字节排列的顺序。 行时各个变量的首地址及字节排列的顺序。 (习题3.15) 7. 编程实现习题 编程实现习题3.14 和3.28
3/8
在DEBUG中查看内存变量 中查看内存变量
6/7
7/7
回答问题: 回答问题:
语句后没有起始地址, 1. end 语句后没有起始地址,会出现什么情况 ? 2. 如何获取数据段的起始地址。 如何获取数据段的起始地址。
1/7
实验二 简单分支程序设计实验
一、实验目的
掌握算术运算指令 算术运算指令。 1. 掌握算术运算指令。 掌握CMP、 TEST、条件转移与无条件转移指令。 2. 掌握CMP、 TEST、条件转移与无条件转移指令。 掌握分支程序设计结构。 3. 掌握分支程序设计结构。
1/7
实验一 熟悉汇编语言开发环境与工具
二、实验内容
2/7
1.在命令行方式下完成HelloWord.asm的编辑、调试与运行。 1.在命令行方式下完成HelloWord.asm的编辑、调试与运行。 在命令行方式下完成HelloWord.asm的编辑 要求:详细记录实验的每一步骤,查看列表文件。 要求:详细记录实验的每一步骤,查看列表文件。 2.在VC IDE下完成 下完成HelloWord.asm的编辑、调试与运行。 的编辑、 2.在 下完成 的编辑 调试与运行。 要求: 详细记录创建VC IDE下实验环境的每一步骤。 下实验环境的每一步骤。 要求:⑴ 详细记录创建 下实验环境的每一步骤 程序运行时字符变量msg的首地址? ⑵ 程序运行时字符变量msg的首地址? msg的首地址 程序运行时第一条可执行语句的首地址? ⑶ 程序运行时第一条可执行语句的首地址? 的值? 程序加载到内存后寄存器ESP、CS、DS的值 ⑷ 程序加载到内存后寄存器ESP、CS、DS的值?
实验四 子程序与操作系统功能调用 一、实验目的
1/8
掌握主程序与子程序间参数传递的方法。 1. 掌握主程序与子程序间参数传递的方法。 2. 掌握Windows API的调用方法。 掌握Windows API的调用方法 的调用方法。 掌握Dos的功能调用方法 的功能调用方法。 3. 掌握Dos的功能调用方法。 4. 掌握将复杂的应用问题分解为简单的小问 题的方法,深刻理解“自定向下, 题的方法,深刻理解“自定向下,逐步求 精”的思想。 的思想。
5/8
循环程序设计实验 实验三 循环程序设计实验
二、实验内容
4.有一个首地址为 4.有一个首地址为string的字符串 ,剔除 有一个首地址为 的字符串 string中所有的空格字符。请从字符串最后 中所有的空格字符。 中所有的空格字符 一个字符开始逐个向前判断、并进行处理。 一个字符开始逐个向前判断、并进行处理。