实验一 汇编指令和机器代码

实验一 汇编指令和机器代码
实验一 汇编指令和机器代码

实验报告

实验日期:2012 年12 月01 日学号:姓名:

实验名称:实验一汇编指令和机器代码总分:

一.实验目的

本实验共四个程序,均在debug下编写。程序一查看当前目录下的文件,程序二用ASCII码显示程序文件,程序三显示字符串,程序四键入任意字符串并显示出来。

二.实验内容

程序①

在命令行中打开debug程序,输入如下代码

-a100 #汇编命令A100表示汇编程序从100地址开始

0AE9:0100 mov dl,1 #将数值01h 装入DL 寄存器

0AE9:0102 mov ah,2 #将数值02h 装入AH 寄存器

0AE9:0104 int 21 #调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0106 int 20 #调用DOS 20号中断,终止程序,将控制权交回给DEBUG 0AE9:0108

-g

?

Program terminated normally

-u100 106

0AE9:0100 B201 mov dl,01

0AE9:0102 B402 mov dl,02

0AE9:0104 CD21 int 21

0AE9:0106 CD20 int 20

-r #R命令来查看、改变寄存器内容

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=0100 NV UP EI PL NZ NA PO NC

0AE9:0100 B201 MOV DL,01

-n https://www.360docs.net/doc/95646291.html, #debug程序长度

-rbx

BX 0000 #存放长度值高位部分

:

-rcx

CX 0000 #存放长度值低位部分

:8 #程序的字节数

-w #将该程序写入磁盘中

Writing 00008 bytes

-q #退出debug

D:\>dir

D:\>smile

?

D:\>

运行程序

结果分析:程序打印出了asci码值为1的中的笑脸符号,查看了寄存器的值以及当前目录下的文件。

程序②

在命令行中打开debug程序,输入如下代码

-a100 #汇编命令

0AE9:0100 mov cx,0100 #定义循环次数为100H次, 即256次

0AE9:0103 mov dl,00 #dl寄存器中存入00值

0AE9:0105 mov ah,02 #ah寄存器中存入02值

0AE9:0107 int 21 #调用int21DOS功能函数

0AE9:0109 inc dl #dl寄存器的数值加1

0AE9:010B loop 0105 #每执行一次,cx减1,跳转到105地址,循环执行命令,直到

CX=0

0AE9:010D int 20 #程序结束, 调用中断

0AE9:010F

-g #显示ASCII码

运行程序

结果分析:程序循环打印出了从ASCII码0到255对应的字符.

程序③

在命令行中打开debug程序,输入如下代码

-a100 #汇编命令

0AE9:0100 mov dx,109 #dx寄存器存入将要打印的字符串的起始地址值

0AE9:0103 mov ah,9 #ah寄存器存入int21功能函数号

0AE9:0105 int 21 #调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0107 int 20 #调用DOS 20号中断,终止程序,将控制权交回给DEBUG 0AE9:0109 db 'understand?$' #使用db命令定义字符串

0AE9:0115

-r bx

BX 0000 #存放长度值高位部分

:

-r cx

CX 0000 #存放长度值低位部分

:15 #程序的字节数

-n https://www.360docs.net/doc/95646291.html,

-w #将该程序写入磁盘中

Writing 00015 bytes

-g

understand?

Program terminated normally

-d100 #显示字符串

运行程序

结果分析:程序打印出起始地址为100单元的字符串

程序④

在命令行中打开debug程序,输入如下代码

-a100

0AE9:0100 mov dx,0116 #定义内存0116单元的值为字符缓冲区地址的最大的长度

0AE9:0103 mov ah,0a #ah寄存器存入int 21的功能函数0a

0AE9:0105 int 21 #输入缓冲区

0AE9:0107 mov dl,0a #dl寄存器存入0a值

0AE9:0109 mov ah,02 #ah存入功能函数02

0AE9:010B int 21 #调用int21功能函数

0AE9:010D mov dx,0118 #将字符串的起始地址0118存入寄存器dx

0AE9:0110 mov ah,09 #ah寄存器存入函数功能号

0AE9:0112 int 21 #调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0114 int 20 #调用DOS 20号中断,终止程序,将控制权交回给DEBUG 0AE9:0116 db 20 #0116单元存入字符串缓冲区的长度值,即定义缓冲区

0AE9:0117

-g

abcd$

abcd

Program terminated normally

-g

how are you?$

how are you?

Program terminated normally

-

运行程序

结果分析:输入字符串并以$符号结束,程序输出已输入的字符串.

三.实验总结

本次实验熟悉了debug的相关基本知识以及基本操作,了解了DOS系统相关功能的调用,具体到int21功能函数以及int20,为以后的实验打下基础。

微机原理实验一报告

2.1 寻址方式与基本指令实验 2.1.1 实验目的 1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。 2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计 打好基础。 3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法 2.1.2 实验预习要求 1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。 2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。 3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。 4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行 环境的问题除外),以便在实验时进行验证。 2.1.3 实验内容 1、读懂下面的源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件,用EXIT打开EX11.LST文件,了解.LST 文件包含的信息,使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 ○1程序装入后,代码段寄存器CS的内容为1138H,代码段第一条可执行指令“MOV AX DA TA”对应的机器代码为0000B83711H,它是一个——字节指令,注意观察执行该指令是IP 值的变化情况,该指令源操作数DATA的寻址方式是立即数寻址方式,其值是1137。 ○2执行完“MOVDSDA TA”指令后,数据段寄存器DS的内容为1127H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为11270H、11271H和11272H。 ○3程序中第一条“ADDAL[BX]”指令对应的机器代码为0008 8A07H,它是一个四字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为寄存器间接寻址方式,该操作数所在的存储单元的逻辑地址(DS):(BX)为1137:0000,其物理地址为11370H,执行完该指令后(AL)=37H,CF=0H,OF=0H,ZF=0H,SF=0H,AF=0H,PF=0H;计算结果正确,结果是负数 ○4执行完第二条“ADD AL [BX]”指令后(AL)=82H,CF=0H,OF=0H,ZF=0H,SF=1H,AF=0H,PF=0H;计算结果正确,结果是负数 ○5指令“MOV SUM,AL”中,目的操作数的寻址方式为寄存器直接寻址方式。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元值变为00H。 DA TA SEGMENT NUM DB 82H,68H,88H SUM DB ? DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX,DA TA MOV DS,AX

汇编指令和机器码的对应表

汇编指令和机器码的对应表 汇编2010-04-20 21:07:19 阅读259 评论0 字号:大中小订阅 一、汇编速查 MOV AA,BB 将BB 放到AA 里 CALL 调用子程序(相当于BASIC 的GOSUB) RET 与RETF 返回程序(相当于BASIC 的RETURN) CMP XX,YY 比较XX 与YY JZ 若相等则转移 JNZ 若不相等则转移 JB 若小于则转移 JG 若大于则转移 JMP 无条件转移 J??? (各种转移指令) LOOP 循环直到CX为0 INT XX 类似CALL 的中断涵数 PUSH 推入栈(STACK)ESP:PUSH AX POP 出栈ESP:POP CX XCHG 交换ESP:XCHG AX,BX IN、OUT 与PORT有关的IN/OUT XLAT 查表 LEA 段内偏移量。ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的寄存器AH PUSHF、POPF将棋标入/出栈 ADD ESP ADD AX,CX (AX=AX+CX) ADC 加入棋标C的ADD INC ESP INC AX(AX=AX+1) AAA 加法校正 SUB、SBB 减法 DEC ESP:DEC AX(AX=AX-1) NEG 去补, MUL、IMUL 乘 DIV、IDIV 除 SHR、SAR、SHL 算术、逻辑位移R=RIGHT L=LEFT OR、XOR、AND 逻辑运算ESP :XOR AX,AX(AX=0) 直接标志转移 指令格式机器码测试条件如...则转移 JC 72 C=1 有进位 JNS 79 S=0 正号 JNC 73 C=0 无进位 JO 70 O=1 有溢出 JZ/JE 74 Z=1 零/等于 JNO 71 O=0 无溢出

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

实验一--掌握DEBUG-的基本命令及其功能

实验一掌握DEBUG 基本命令及其功能【上篇】查看CPU和内存,用机器指令和汇编指令编程 一.实验目的: 掌握DEBUG 的基本命令及其功能 掌握win7 win8 使用DEBUG功能 二.实验内容: 1. 预备知识:Debug的使用 (1) 什么是Debug? Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。 (2) 我们用到的Debug功能 ●用Debug的R命令查看、改变CPU寄存器的内容; ●用Debug的D命令查看内存中的内容; ●用Debug的E命令改写内存中的内容; ●用Debug的U命令将内存中的机器指令翻译成汇编指令; ●用Debug的T命令执行一条机器指令; ●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。 (3) 进入Debug Debug是在DOS方式下使用的程序。我们在进入Debug前,应先进入到DOS方式。用以下方式可以进入DOS: ①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。 ②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。 三.实验任务 1. 从网上下载Dosbox和debug.exe(文件夹中有)。 2. debug.exe放在D:根目录,然后安装,安装完成以后,点击快捷方式进入Dos界面:

3.输入mount c d:\ 接着输入c: Dosbox 5.接着,你就可以使用Debug: debug 6.备注:debug.exe放在D:根目录下,你也可以把debug.exe放在任何一个文件夹下面。 其中这个文件夹就是mount c d:所对应的。 一.(1) 使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU 中相关寄存器中内容的变化。(逐条执行,每条指令执行结果截图) 机器码汇编指令 b8 20 4e mov ax,4E20H 05 16 14 add ax,1416H bb 00 20 mov bx,2000H 01 d8 add ax,bx 89 c3 mov bx,ax

汇编语言指令汇总

汇编语言程序设计资料简汇 通用寄存器 8位通用寄存器8个:AL、AH、BL、BH、CL、CH、DL、DH。 16位通用寄存器8个:AX、BX、CX、DX、SI、DI、BP、SP。 AL与AH、BL与BH、CL与CH、DL与DH分别对应于AX、BX、CX和DX的低8位与高8位。专用寄存器 指令指针:IP(16位)。 标志寄存器:没有助记符(FLAGS 16位)。 段寄存器 段寄存器:CS、DS、ES、SS。 内存分段:80x86采用分段内存管理机制,主要包括下列几种类型的段: ?代码段:用来存放程序的指令序列。 ?数据段:用来存放程序的数据。 ?堆栈段:作为堆栈使用的内存区域,用来存放过程返回地址、过程参数等。 物理地址与逻辑地址 ?物理地址:内存单元的实际地址,也就是出现在地址总线上的地址。 ?逻辑地址:或称分段地址。 ?段地址与偏移地址都是16位。 ?系统采用下列方法将逻辑地址自动转换为20位的物理地址: 物理地址= 段地址×16 + 偏移地址 ?每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。 与数据有关的寻址方式 立即寻址方式 立即寻址方式所提供的操作数紧跟在操作码的后面,与操作码一起放在指令代码段中。立即数可以是8位数或16位数。如果是16位数,则低位字节存放在低地址中,高位字节存放在高地址中。 例:MOV AL,18 指令执行后,(AL)= 12H 寄存器寻址方式 在寄存器寻址方式中,操作数包含于CPU的内部寄存器之中。这种寻址方式大都用于寄存器之间的数据传输。 例3:MOV AX,BX 如指令执行前(AX)= 6789H,(BX)= 0000H;则指令执行后,(AX)= 0000H,(BX)保持不变。 直接寻址方式 直接寻址方式是操作数地址的16位偏移量直接包含在指令中,和指令操作码一起放在代码段,而操作数则在数据段中。操作数的地址是数据段寄存器DS中的内容左移4位后,加上指令给定的16位地址偏移量。直接寻址方式适合于处理单个数据变量。 寄存器间接寻址方式 在寄存器间接寻址方式中,操作数在存储器中。操作数的有效地址由变址寄存器SI、DI或基址寄存器BX、BP提供。 如果指令中指定的寄存器是BX、SI、DI,则用DS寄存器的内容作为段地址。 如指令中用BP寄存器,则操作数的段地址在SS中,即堆栈段。

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

汇编指令与机器码

一、状态寄存器 PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 条件码: ①OF(Overflow Flag)溢出标志。溢出时为1,否则置0。 ②SF(Sign Flag)符号标志。结果为负时置1,否则置0. ③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0. ④CF(Carry Flag)进位标志,进位时置1,否则置0. ⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0. ⑥PF(Parity Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0. 控制标志位: ⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。 ⑧IF(Interrupt Flag)中断标志。 ⑨TF(Trap Flag)陷井标志。 二、直接标志转移(8位寻址) 指令格式机器码测试条件如...则转移 JC 72 C=1 有进位 JNC 73 C=0 无进位 JZ/JE 74 Z=1 零/等于 JNZ/JNE 75 Z=0 不为零/不等于 JS 78 S=1 负号 JNS 79 S=0 正号 JO 70 O=1 有溢出 JNO 71 O=0 无溢出 JP/JPE 7A P=1 奇偶位为偶 JNP/IPO 7B P=0 奇偶位为奇 三、间接标志转移(8位寻址) 指令格式机器码测试格式如...则转移 JA/JNBE(比较无符号数) 77 C或Z=0 > 高于/不低于或等于 JAE/JNB(比较无符号数) 73 C=0 >=高于或等于/不低于 JB/JNAE(比较无符号数) 72 C=1 < 低于/不高于或等于

实验二 常用命令操作实验报告

实验二 常用命令操作实验报告 1、 实验目的 1. 熟悉Linux文件系统结构 2. 掌握文本操作命令 3. 掌握文件、目录操作命令 2、 实验内容 1. 显示、改变文件目录 2. 显示文本文件 3. 匹配文本文件 4. 文本文件排序 5. 复制、删除、移动文件 6. 复制、删除、移动目录文件 7. 建立硬连接、符号连接文件,理解文件i节点和链接数 3、 实验准备 1. 从20 2.117.179.110下载SSH客户端软件PieTTy.exe,使用该虚拟 终端登录主机120.95.134.104完成本实验 2. 主机120.95.134.104目录/var/xg11x下保存了本实验用到文件4、 步骤和要求 1. 登录主机120.95.134.104 用户名:学号 口令:学号 2. 练习cd、ls、pwd命令,理解显示信息意义 命令显示信息以及意义 mesg n决定是否允许其他人传讯息到自己的终端机介面。 y允许讯息传到终端机介面上;n不允许讯息传到终 端机介面上 。

pwd显示当前的工作路径为/home/2011013304 cd / 进入根目录 pwd显示当前工作路径为/ cd /home进入home目录 pwd显示当前工作路径为/home cd 个人学号进入用户主目录 pwd显示当前工作路径为/home/2011013304 cd ..返回上上级目录,即为home目录 cd /个人学号进入根目录下的2011013304文件,由于此文件在根 目录下不存在,故出错。 Cd返回用户主目录 cd /var/xg11x进入xg11x目录下,但此目录不存在 pwd 显示当前工作路径。仍为/home/2011013304 cd .. 返回上上级目录 pwd显示当前目录/home cd返回用户主目录 ls –l列出当前路径下的文件名称,并以长格式显示文件 信息 ls –l .列出当前路径下的文件名称,并以长格式显示文件 信息 ls –ld .列出当前目录下文件的详细信息 ls –ld /home列出/home目录下的文件详细信息 ls –ld /home/列出/home/2011013304目录下的详细信息

PLC基本指令训练实验报告要求

实验二 PLC 基本指令训练实验 一、实验目的 1.掌握编程器的键盘操作 2.学会程序的输入和指令的增删 3.加深对常用指令的理解 二、实验设备(记录下仪器、设备的规格、型号及数量) 三、实验内容(包括梯形图、指令表、数据、时序图)实验中作好纪录 (一) PRO15编程器基本操作 1.开机: 将编程开关,拨至右端 2.清零: (1)屏幕清零 (2)内存清零 当完成步骤(1)后,继续下面操作 3.键入程序练习: 椐实验教材内容进行,每键入一条指令后,按 键即进入内存。 指令上下滚动显示 4.修改程序: (1)如改本行程序,只需写入正确程序后按即可。 (2 )删除本行指令时,按 即可。 (3 )插入程序,① 回到初始程序行(即屏幕清零) ② 键入待插入的地址码,写入新指令。 5.运行程序: 将编程开关,拨至左端 (二) 基本指令训练(写出指令表,记录数据或时序图) 1.逻辑指令实验 0500 0007 END 00070500ON OFF 0501 0007 END 00070501ON OFF

0500 0002 END 00020500ON OFF 0000ON ON ON ON OFF OFF OFF OFF 000105000001 0500 0000END 0500 0000 END 0001000000010500 ON ON ON ON OFF OFF OFF OFF 0002 0500 0000END 00030001 2.定时、计数指令实验 输入如下程序,观察运行结果,监视各计时器或计数器的内容及状态。 TIM 0000END TIM00 00000500 00 #0040000010s 2s TIM000500 0002 END 00020003 0501CNT010501 0003CNT01 CNT 01 #0003 0000END 00000002 0500CNT010500 0002CNT01 CNT 01 #00391902100s 四、实验总结(实验中出现的问题及解决方法) 注: 1. 预习要求(实验课前按指定的梯型图列出指令表) 2. 由统一的实验报告纸完成。 3. 写清班级、姓名、日期、同组人名。

汇编指令机器码总结

汇编指令机器码总结与验证 摘要:本文介绍了汇编指令机器码的含义与作用,并讨论了指令的组成结构即操作码与地址码。然后全面总结了机器码中的单字节操作码,并利用Debug工具进行了详细的验证。 关键词:指令;机器码 一、机器码概述[1] 机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。这种指令集就称为机器码,它是电脑的CPU可直接解读的数据。一条指令是机器语言的一个语句,是一组有意义的二进制代码。计算机通过执行指令来处理各种数据。 为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息: a) 操作码 b) 操作数的地址 c) 操作结果的存储地址 d) 下条指令的地址 一条指令实际上包括两种信息即操作码和地址码。操作码用来表示该指令所要完成的操作(如加、减、乘、除、数据传送等),其长度取决于指令系统中的指令条数。地址码用来描述该指令的操作对象,它或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址(即寄存器名)。 二、机器码详解[2] 由上文已知,一条指令一般由操作码和地址码组成。其中,操作码是指明CPU对内存或寄存器中的数据进行什么样的操作,地址码给出这些数据对象。下面我们就将指令分为两部分进行研究。1.操作码 操作码一般占用1个字节(8位)或2个字节(16位)。其中最低比特(记作W)在很多指令中表示目标操作数的位宽,W=0表示字节长(8位)操作数,W=1表示双字节长(16位)操作数。例如,操作码00000000B(W=0)表示“ADD 8位寄存器,8位寄存器”,而00000001B(W=1)表示“ADD 16位寄存器,16位寄存器”。 2.地址码 地址码一般占用1个字节,其中的8个比特位可分为三组,形式一般为“oommmrrr”。这些分组大致可分为以下四个类型: 1) “oo”——表示指令的地址偏移量类型 a) 00:如果mmm=110,那么指令后紧跟一个地址偏移量;否则未使用地址偏移量 b) 01:指令后紧跟一个8比特无符号地址偏移量 c) 10:指令后紧跟一个16比特无符号地址偏移量 d) 11:此时mmm表示一个寄存器而不是地址

PIC8位单片机汇编语言常用指令的识读

PIC8位单片机汇编语言常用指令的识读(上) 各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC 系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号操作码助记符操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 二、清零指令(共4条) 1 寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2 看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

第三章 基本指令实验

第三章 基本指令实验 §3.1 [实验3.1] 循环操作 一、实验目的 1. 掌握循环操作指令的运用; 2. 掌握用汇编语言编写DSP 程序的方法。 二、实验设备 1.一台装有CCS 软件的计算机; 2. DSP 实验箱的TMS320C5416主控板; 3. DSP 硬件仿真器。 三、实验原理 TMS320C54x 具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制以及子程序操作。本实验要求编写一程序完成 ∑==51i i x y 的计算。这个求和运算可以通过一个循环操作指令BANZ 来完成。BANZ 的功能是当辅助寄存器的值不为0时转移到指定标号执行。 例如: STM #4, AR2 loop: ADD *AR3+, A BANZ loop, *AR2– ;当AR2不为零时转移到loop 行执行。 假设AR3中存有x 1到x 5五个变量的地址,则上述简单的代码就完成了这五个数的求和。 四、实验步骤 1. 学习有关指令的使用方法; 2. 在CCS 环境中打开本实验的工程(Ex3_1.pjt ),阅读源程序; 3. 编译并重建 .out 输出文件(Rebuild All … ),然后通过仿真器把执行代码(.out 的文件)下载到 DSP 芯片中;

4.在“end:B end”代码行设置断点(当光标置于改行时,单击工具条上的Toggle Breakpoint图标, 此时该行代码左端会出现一个小红点或双击此行),单击运行; 5.选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值的变化。应能看到五个加数的值及其求和值。 注意查看0X0060--0X0065单元中计算值显示的十六进制结果。 6. 停止程序的运行(单击); 7.尝试改变对变量的初始赋值,或者增加或减少变量数目,重复上述3~6步过程,验证程序运行结果。 五、思考题 1.总结迭代次数与循环计数器初值的关系(在本实验的代码中,用AR2作为循环计数器,设其初值为4,共执行了5次加法。); 2.学习其它转移指令。

汇编语言指令分类详解

3.1 8086/8088寻址方式 计算机中的指令由操作码字段和操作数字段组成。 操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。 操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。 寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088的基本寻址方式有六种。 1.立即寻址 所提供的操作数直接包含在指令中。它紧跟在 操作码的后面,与操作码一起放在代码段区域中。 如图所示。 例如:MOV AX,3000H 立即数可以是8位的,也可以是16位的。若 是16位的,则存储时低位在前,高位在后。 立即寻址主要用来给寄存器或存储器赋初值。 2.直接寻址 操作数地址的16位偏移量直接包含在指令中。它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。 例如:MOV AX,DS:[2000H];

图2-2 (对DS来讲可以省略成MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。 8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。 MOV AX,[2000H] ;数据段 MOV BX,ES:[3000H] ;段超越,操作数在附加段 即绝对地址=(ES)*16+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。可以 分成两种情况: (1)以SI、DI、BX间接寻址,则 通常操作数在现行数据段区域 中,即数据段寄存器(DS)*16 加上SI、DI、BX中的16位偏移 量,为操作数的地址, 例如:MOV AX,[SI] 操作数地址是:(DS)*16+(SI) (2)以寄存器BP间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址, 例如:MOV AX,[BP] 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。 例如:MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)5.变址寻址 由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个

Intel8086ASMCode汇编指令的机器码

8086指令码汇总表 8086指令有汇编语言指令和指令码两种形式,汇编语言指令形式经过汇编程序处理后生成指令码形式。 通过指令码形式可帮助理解汇编语言指令格式的含义和用法。 O、8086指令码格式 0B/1B 1B或2B 0B/1B 0B/1B/2B/4B 0B/1B/2B/4B 指令前缀操作码段寻址方式段偏移量参数立即数参数说明:偏移量参数和立即数参数的有无由寻址方式段决定。 一、传送类指令 MOV指令 REG/MEM→/←REG 100010dw mod reg r/m IMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1 MEM→AX 1010000w addr-low addr-high AX→MEM 1010001w addr-low addr-high REG/MEM→段REG 10001110 mod reg r/m 8E 段REG→REG/MEM 10001100 mod reg r/m 8C PUSH指令 REG/MEM 11111111 mod 110 r/m FF REG 01010reg 段REG 000reg110 POP指令 REG/MEM 10001111 mod 000 r/m 8F REG 01011reg 段REG 000reg111 XCHG指令 REG/MEM←→REG 1000011w mod reg r/m REG←→AX 10010reg XLAT指令11010111 D7 LEA指令10001101 mod reg r/m 8D LDS指令11000101 mod reg r/m C5 LES指令11000100 mod reg r/m C4 LAHF指令10011111 9F SAHF指令10011110 9E PUSHF指令10011100 9C POPF指令10011101 9D

一些常用的汇编语言指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器存储器操作数传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器存储器操作数传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。 LES :同上,只是16位段基址送ES中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数,操作数不能是CS和立即数 标志操作指令 LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH 指定的位。不影响标志位。 SAHF:与上相反,把AH中的标志位传送回标志寄存器。 PUSHF:把标志寄存器内容压入栈顶。 POPF:把栈顶的一个字节传送到标志寄存器中。 CLC:进位位清零。 STC:进位位为1。 CMC:进位位取反。 CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。 STD:DF为1。 CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。 STI:IF为1。 加减运算指令

注意:对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD。 ADC:把进位CF中的数值加上去。 INC:加1指令 SUB。 SBB:把进位CF中数值减去。 DEC:减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。 乘除运算指令 MUL 操作数:无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。IMUL 操作数:有符号数乘法指令。基本与MUL相同。 DIV 操作数:被除数是在AX(除数8位)或者DX和AX(除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV:有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW,CWD:把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT:取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志) SF(符号)反映运算结果,AF(辅助进位)未定义。自己与自己AND值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1)OR 操作数1 操作数2:自己与自己OR值不变,CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志)SF(符号)反映运算结果,AF(辅助进位)未定义。她使用于将若干位置1:

相关文档
最新文档