文档库 最新最全的文档下载
当前位置:文档库 › 微机原理 debug指令详解

微机原理 debug指令详解

微机原理 debug指令详解
微机原理 debug指令详解

微机原理debug指令详解

一、DEBUG概述

DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。此外,DEBUG 还可以用于读写端口中的数值。

在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入内存中。DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码,使用两位数表示十六进制数据(0~9,A~F)。在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地址,地址的输入格式是: [段地址]: [位移]。如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。前100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。在DEBUG中,使用四位十六进制数表示地址(0~9,A~F)。

DEBUG输入数据时有两种方法: 提示方法和非提示方法。在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。执行后可以看到该地址中已有的内容及一个冒号提示符。此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。在非提示方法下,输入保持数据的内存地址以及要输入的数据。DEBUG的启动:进入DOS 状态下,键入DEBUG ?,按ENTER键,如: C:\>DEBUG ?,则屏幕显示:-

符号“-”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。

DEBUG的退出:

在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。

DEBUG的使用:

在DEBUG的提示符后输入DEBUG命令,按ENTER键。

二、DEBUG 命令详解

★A命令

格式:A[地址]

功能:将指令直接汇编成机器码输入到内存中。

参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。

★C命令

格式:C[源地址范围][目的地址]

功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容,若相同则不

显示任何内容。

参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。[目的地址] 指定要比较的第二个内存区域的起始地址。

★D命令

格式:D[地址] 或D[起始地址][目的地址]

功能:以内存映象方式显示内存中的数据。参数说明:指定要显示内容的内存单元的起始地址和结束地址,或起始地址和长度。如果不指定[地址],Debug将从以前d 命令中所指定的地址范围的末尾开始显示128个字节的内容;第一次从DS:100处开始显示。

★E命令

格式:E[地址] [字节串] 或E[地址]

功能:从指定的地址开始修改内存值。参数说明:[地址]指定存放[字节串]第一个内存的位置,[字节串]是要放入内存单元中的数据。

★F命令

格式:F[地址范围] [字节或字节串]

功能:将要填写的字节或字节串填入由地址范围指定的存储器中。

参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。[字节或字节串] 指定要输入的数据,可以由十六进制数或引号包括起来的字符串组成。

★G命令

格式:G[=起始地址] [[断点]……]

功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。参数说明:[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的地址。如果不指定[=起始地址],DEBUG将从CS:IP 寄存器中的当前地址开始执行程序。[[断点]……] 指定可以设置为g 命令的部分的1 到10 个临时断点。

★H命令

格式:H[数值][数值]

功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。

参数说明:[数值]表示从0 到FFFFh 范围内的任何十六进制数字。

★I命令

格式:I[端口地址]

功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字节)。参数说明:[端口地址]指定要读取数据的端口地址。

★L命令

格式:L[地址][盘号:][逻辑扇区号][扇区数]

功能:将一个文件或盘的绝对扇区装入存储器。

参数说明:[地址] 指定要在其中加载文件或扇区内容的内存空间的起始位置。[盘号:] 指定包含读取指定扇区的磁盘的驱动器。该值是数值型,表示为:0 = A, 1 = B, 2 = C,……等。[逻辑扇区号] 指定要加载其内容的第一个扇区的十六进制数。[扇区数] 指定要加载其内容的连续扇区的十六进制数。

★M命令

格式:M[地址范围][起始地址]

功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中

参数说明:[地址范围] 指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。[起始地址] 指定要将range 内容复制到该位置的起始地址。

★N命令

格式:N[盘号: ] [路径] [文件名] [扩展名]

功能:定义DEBUG使用的文件。

参数说明:[盘号: ] [路径] [文件名] [扩展名]指定文件所在的盘符,路径,文件名和扩展名。★O命令

格式:O[端口地址] [数据]

功能:发送数据(字节)到指定的输出端口。

参数说明:[端口地址]指定要写入数据的端口地址,[数据] 指定要向[端口地址] 中写入的字节值。

★P命令

格式:P[=地址] [数据]

功能:执行一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。

参数说明:[=地址] 指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP 寄存器中指定的当前地址,[数据] 指定在将控制返回给Debug 之前要执行的指令数,默认值为1。

★Q命令

格式:Q

功能:退出DEBUG返回DOS。

参数说明:无参数。

★R命令

格式:R[寄存器]

功能:1. 显示单个寄存器的内容,并提供修改功能。2. 显示所有寄存器内容,再加上字母标志位状态以及要执行的下一条指令。3. 显示8个标志位状态,并提供修改功能。

参数说明:[寄存器]指定要显示其内容的寄存器名。

★S命令

格式:S[地址范围] [字符串]

功能:在指定的地址范围内查找给定的字符串。

参数说明:[地址范围] 指定要搜索范围的开始和结束地址。[字符串] 指定要搜索的字节值或字符串。字符串应包括在引号中。

★T命令

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

功能: 逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。

参数说明:[=地址] 指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP 寄存器中指定的当前地址,[指令条数] 指定在将控制返回给Debug 之前要执行的指令数,默认值为1。

★U命令

格式:U[起始地址]或者[地址范围]

功能:将内存中的内容转换为汇编语句。

参数说明:[起始地址]或者[地址范围]指定要反汇编代码的起始地址和结束地址,或起始地址和长度。

★W命令

格式:W[地址] [盘符:] [起始扇区] [扇区数]

功能:将内存中的数据写入磁盘中。

参数说明:[地址]指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定address,Debug 程序将从CS:100 开始。[盘符:] 指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。[起始扇区] 指定要写入第一个扇区的十六进制数。[扇区数] 指定要写入的扇区数。

★XA命令格式:XA[页面数] 功能:分配扩展内存的指定页面数参数说明:[页面数] 指定要分配的扩展内存的16KB 页数。★XD命令格式:XD [释放的句柄] 功能:释放指向扩展内存的句柄。参数说明:[释放的句柄] 指定要释放的句柄。★XM命令格式:XM [要映射扩展内存的逻辑页面号] [映射到的物理页面号] [句柄] 功能:将属于指定句柄的扩展内存逻辑页映射到扩展内存的物理页。参数说明:[要映射扩展内存的逻辑页面号]指定要映射到物理页的扩展内存的逻辑页面号。[映射到的物理页面号]指定将映射到的物理页面号。[句柄]指定句柄。★XS命令格式:XS 功能:显示有关扩展内存状态的信息。参

数说明:无参数

★A命令使用

说明:用于小段程序的汇编及修改目标程序,所有输入的数字均默认为十六进制,并且不需要以“h”字符结尾。用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到CS:0100区域,则在它上次停止处开始汇编。

注意:1. 直接在A命令下输入跳转指令时,跳转指令后应跟跳转到的语句所在内存单元的地址,不能跟标号;使用跳转指令时,可以指定跳转指令的属性:near,far。near 前缀可以缩写为ne。如下例所示:-a0100:0100

0100:0100 jmp 102

0100:0102 jmp near 105

0100:0105 jmp far 10a 2. 汇编语言指令所涉及到的操作数可以是字操作数也可以是字节操作数,在语句不能判别操作数的类型时,可以使用前缀word ptr 或者前缀byte ptr 指定操作数的类型。缩写分别是:wo 和by。如下列所示:-a0100:0100

0100:0100 dec word ptr [100]

0100:0102 dec wo ptr [100]

0100:0105 dec byte ptr [100] 2. 在DEBUG下,应注意区分立即操作数和内存地址的操作数,使用包括在中括号([ ])中的操作数表示内存地址。3. 在DEBUG下,能够使用的伪指令仅有DB和DW两个,分别用于定义字节和字操作数,此时定义的操作数被存放在该定义指令所在的内存空间中。如下列所示(注意内存空间的变换,why?):-a 0100:0100

0100:0100?DB?‘ABCDEFG’?

0100:0107

★C命令使用说明:如果[源地址范围]和[目的地址]中内存单元的数据相同,Debug 将不显示任何内容而直接返回到Debug 提示符。如果有差异,Debug将按如下格式显示:[源地址] 源地址中内容目的地址中内容[目的地址]

如下列所示:

-C CS:100 105 DS:300;(假定CS=0AF6;DS=1000)0AF6:0100 88 00 1000:0300

0AF6:0101 C0 00 1000:0301

0AF6:0102 89 00 1000:0302

0AF6:0103 D8 00 1000:0303

0AF6:0104 65 00 1000:0304

0AF6:0105 66 00 1000:0305

★D命令使用

说明:当使用 d 命令时,Debug分两个部分显示内存单元内容:左边显示内存单元中存放的十六进制数;右边显示左边的十六进制所表示的ASCII字符,所有不可打印字符用句号(.)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符“–“。

从键盘键入下面命令:-d cs:100 10f Debug 按以下格式显示地址范围中的内容(假定CS=0AF6):

0AF6:0100 77 61 6E 67 78 69 61 6F-69 6A 6B FF 0E 00 01 FF wangxiaoijk….. 键入以下命令,Debug 将从CS:100 开始显示20h 个字节的内容:-d cs:100 l 20 键入以下命令,Debug 将显示范围从DS 段的100h 到115h 中所有字节的内容:-d 100 115

注意:在D命令中若不指定段寄存器,默认规定为DS。

★E命令使用说明:当使用E命令时,有两种使用格式: 1、用E命令中包含的字节串替换从指定的地址开始的多个字节的内容;2、E命令后不跟字节串,则允许按顺序方式显示和修改内存值,按下空格键显示下一字节内容,若想修改,直接输入相应值;按下减号键显示上一字节内容,若想修改,直接输入相应值。3、停止执行 e 命令。按ENTER 键。在任何字节位置都可以按ENTER。

注意:

1. 若地址部分只输入偏移量,则E 命令认为段包括在DS寄存器中。

2. [字节串]的值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。

3. 使用E命令后,内存单元中原来的数据将丢失,或者说被新输入的数据覆盖。从键盘键入下面命令:-E 100 Debug 按下面的格式显示第一个字节的内容(假定DS=0AF6):0AF6:0100 EB. 要将该值更改为61,请在插入点键入(使用符号”_”表示) 61,如下所示:0AF6:0100 AB.61_ 此时,若按下空格键,将显示下一个内存单元中的内容: 0AF6:0100 AB.61 EF._ 此时,又可以在插入点键入新的内容,改写当前显示的内存内容,若不需要改写当前内存单元的内容,可以直接按下空格键,将显示下一个内存单元的内容,如此,一直到按ENTER 停止 e 命令并返回到Debug 提示符下。若使用减号键,操作和按下空格键一样,区别在于将显示上一个内存单元的内容。

注意:使用该种方法,只能键入16进制数,不能键入字符串。

从键盘键入下面命令:

-E DS:100 EF’ABC’41

则执行上面的命令后,从DS:100内存单元开始的5个连续的字节中的内容将被数据0EFH,字符“A”“B”“C”的ASCII码和数据41H替换。

★F命令使用说明:如果[地址范围]包含的字节数比[字节或字节串]中的数值大,Debug 将对[字节或字节串]中提供的值反复使用,直到[地址范围]中的所有字节全部填充。如果在[地址范围]中的任何内存单元损坏或不存在,Debug 将显示错误消息并停止f命令。如果[字节或字节串] 包含的数值多于[地址范围]中的字节数,Debug 将忽略[字节或字节串]中额外的值。从键盘键入下面的命令:-F 1000:100 105 ‘ABCDEFG’指令执行后,DEBUG使用’ABCDEF’填充1000:100到1000:105内存单元。从键盘键入下面的命令:1000:100 150 40 45 51 52 44 指令执行后,DEBUG反复使用40,45,51,52,44填充从1000:100 到1000:150的内存单元,直到50h 个字节全部填满为止。

★G命令使用

说明:G命令中的=不能省略,可以只给出偏移地址,默认段地址为当前的CS;若省略=,则该地址就成为G命令中的断点地址。程序将从指定的开始地址不停的执行程序,一直到遇到结束指令为止,并显示“Program terminated normally”。断点地址只对本次G命令有效;下一条G命令若需要断点地址,应重新进行指定。当使用G命令执行程序到断电地址后,显示断点地址处的指令和寄存器的内容。

注意:断点地址应为一条指令在内存单元中的首字节地址。

★H命令使用

说明: Debug 首先将指定的两个参数相加,然后用第一个参数中减去第二个参数。并将计算的结果以4位16进制形式显示在下一行中:先显示计算和,然后显示计算差。

从键盘键入下面的命令:

H 12 34

执行后,将在下一行显示:

0046 FFDE

★I命令使用

说明:[端口地址]的分为应在0~FFFFH的范围内。

从键盘键入下面的命令:

I FFFF

执行后,将在下一行显示(假定端口0FFFFH中的内容为FFH):

FF

★L命令使用说明: 单个L命令能够装入的最大扇区数是80H,其中盘号0,1,2,3……分别代表A,B,C,……;若出现读盘错,显示错误信息。只有加载特定扇区的内容而不是加载debug 命令行或最近的Debug n(名称)命令中指定的文件时,才能使用drive、start 和number 参数。L命令使用情况,可以分为下列几种情况:1、使用不带参数的L命令当使用不带参数的L 命令时,在debug 命令行上指定的文件将加载到从地址CS:100 开始内存中。Debug 同时将BX 和CX 寄存器设置为加载的字节数(CX表示低位,BX表示高位)。如果不在debug 命令行指定文件,所装入的文件将是最近使用n 命令经常指定的文件。2、使用带有address 参数的L命令

使用带address 参数的L命令,Debug 将从内存位置address 开始加载文件或指定扇区的内容。???

3、使用带全部参数的L命令使用带所有参数的L命令,Debug 将加载指定磁盘扇区的内容而不是加载文件。加载特定扇区的内容,指定范围内的每个扇区均从drive 读取。Debug 从start 开始加载,直到在number 中指定的扇区数中的内容全部被加载。从键盘键入如下命令(假定文件abc.exe存在当前目录之下):N wangxiao.exe L

则把文件wangxiao.exe加载到CS:100开始的内存单元中。若要将文件加载到1000:100开始内存单元中,键入:L 1000:100

★M命令使用

说明:传送期间,源数据区和目标数据区可以部分重叠;传送后源区数据保持不变,目的区的数据将使用源区中的数据进行改写。

从键盘键入如下命令:-M CS:100 150 DS:500

执行该指令,Debug 首先将CS:150 地址中的内容复制到地址DS:550 中,然后将CS:14F 地址中的内容复制到CS:54F 中,如此操作直至将CS:100 地址中的内容复制到地址DS:500 中。

★N命令使用

说明: 可同时定义两个操作文件,并将形成的文件控制块相应的设置在内存CS:5C和CS:6C 上,供以后的L和W命令操作之用。N命令的两个用途:

1、可以使用N为后面的L(加载)或W(写入)命令指定所使用的文件。

2、可以使用N命令指定正在被调试文件的命令行参数和开关。

如下所示:假定在Debug中正在调试的程序https://www.wendangku.net/doc/3310933347.html,。若想为https://www.wendangku.net/doc/3310933347.html,指定两个参数并运行此程序。可以键入如下的命令:-N param1,param2 -G 从键盘键入如下的

命令序列:-N wang.exe -L -N xiao1.dat xiao2.dat -G 则第一个N 命令将wang.exe 指定为后接的L(加载)命令的文件,该命令将wang.exe 加载到内存。第二个N 命令指定wang.exe 将使用的参数。最后G命令将使用参数xiao1.dat和xiao2.dat运行wang.exe文件。此功能如同在DOS命令行中键入了wang.exe xiao1.dat xiao2.dat。注意:不要在N命令的第二种形式后再次使用L命令,否则N命令的第二种形式中指定的参数将不起作用。此外,如果在N命令的第二种形式后使用W(写入)命令,将使用名称xiao2.dat保存正在调试的文件wang.exe。每次使用N命令,都将影响下面的四个内存区域:内存位置内容CS:5C 文件 1 的文件控制数据块(FCB) CS:6C 文件 2 的文件控制数据块(FCB) CS:80 N命令行的长度(以字符表示)CS:81 N命令行字符的开头N命令指定的第一个文件名被放在CS:5C 的FCB 中。如果指定第二个文件名,第二个文件文将放置到CS:6C 的FCB 中。N命令行上键入的字符数(除第一个字符N之外)存储在位置CS:80。N命令行上的实际字符(再次,除了字母N之外)存储在以CS:81 开头的位置。★O 命令使用

说明:[端口地址]的分为应在0~FFFFH的范围内,[数据]应为字节数据。

从键盘键入下面的命令;

-O 73 FF

指令执行后,端口73H中的数据为0FFH。

★P命令使用

说明: 使用P命令执行程序,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。若被执行的指令不是循环、重复的字符串指令、软件中断或子程序,则P 命令与T(跟踪)命令的作用相同。考虑程序在地址CS:168F处有一个call 指令。要运行完call目标位置的子程序然后将控制返回Debug,从键盘键入下面命令:P=168F 执行指令后,按如下格式显示结果:AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=1692 NV UP EI PL NZ AC PO NC

0AF6:1692 BA2601 MOV AX,0126

★Q命令使用

-Q

执行该命令后,结束DEBUG,返回DOS。

★R命令使用说明:可以使用的寄存器名有:AX、BX、CX、DX、SP、BP、SI、DI、DS、ES、SS、CS、IP、PC 及F。键入R命令不跟任何可用的寄存器名,则将显示所有的寄存器的内容以及CS:IP指向的存储单元中的内容;若键入R命令指定了寄存器名称,将以十六进制数形式显示该寄存器中的内容,下一行显示冒号提示符,在冒号提示符后面可以为寄存器键入新的数据。若不需要修改寄存器的数据,直接按ENTER 键返回Debug 提示符。如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示Debug提示符。要更改标志的设置,请从下表中键入适当的两字母代码;若不需要修改,直接ENTER 键返回Debug 提示符。可以修改全部或部分标志位,可以按任何顺序

键入新的标志值。不需要在这些值之间留出空格。任何没有指定新值的标志保持不变。在DEBUG下,标志位表示如下:标志名标志为1 标志为0 OF OV NV DF DN UP IF EI DI SF NG PL ZF ZR NZ AF AC NA PF PE PO CF CY NC 注意:若输入的寄存器名不在上面的有效寄存器名之内,将显示:bf error R命令后只能跟一个有效的寄存器名。修改标志位如果指定没有在前面的表中列出的标志代码,将显示:bf error 若为一个标志位指定了多个值,Debug 将显示以下消息:df error 要只查看标志的状态,键入以下命令:-R F 将按如下格式显示:NV UP DI NG NZ AC PE NC - _ 此时可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下所示:NV UP DI NG NZ AC PE NC –PLEICY执行指令后,将使用新的标志位数值代替旧值。要查看当前所有寄存器的取值、所有标志位的内容和CS:IP指向的内存单元指令,键入以下命令:-R 如果当前位置是CS:1692,显示外观将类似于以下内容:AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=1692 NV UP EI PL NZ AC PO NC 0AF6:1692 BA2601 MOV AX,0126 从键盘上键入如下命令:-R CX 执行后,将显示:CX 0000 : 在冒号后可以位CX键入新值,若不需要改变,直接按ENTER。★S命令使用

说明: 若在给定的分为内要搜索字节出现多次,将显示出所有地址。隐含地址为DS段值。假定从范围DS:100 到DS:110查找是否包含61,键入下面命令:-S 100 110 61 执行程序后,显示:0AF6:010A0AF6:010F -若要在范围CS:100 到CS:200内搜索字符串“wangxiao”,键入下面的命令:-S CS:100 CS:200 ‘wangxiao’

★T命令使用

说明: 通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟踪多条指令,每执行一条指令之后,显示所有寄存器的内容和标志状态以及下一条指令在内存中的保存情况。T命令若不跟[=地址]参数,则从当前CS:IP处开始执行,第一次键入的T命令从CS:100处开始执行程序。T命令默认寄存器位CS。参考P命令。

键入下面得到命令:

-T

若是第一次执行,则显示:AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=0103 NV UP EI PL NZ AC PO NC

0AF6:0103 BA2601 MOV AX,0126

若要从CS:200处开始执行程序,则键入下面的命令:

T=CS:200

★U命令使用

说明:U命令中如果没有使用参数,第一次使用,则U命令从CS:IP开始对20h个字节内容进行反汇编;若不是第一次使用,则从前面U命令所显示地址后的第一个地址开始开始对

20h个字节内容进行反汇编。若要从CS:100开始反汇编8 (10h) 字节,键入下面命令:-U CS:100 108 程序执行后,显示下面的结果:OAF6:01OO 21725F AND [BP+SI+5F],SI OAF6:01O3 C606E3991A MOV BYTE PTR [99E3],1A OAF6:01O8 C3 RET -

★W命令使用

说明: 在使用不带参数的W命令之前,BX和CX中应包含要写入文件的字节数,BX为高位,CX为低位,写入的文件为最近N命令命名的文件。不能用W命令写入.exe 或.hex 文件。

从键盘键入下面的命令:

-N ABC.DA T

-W

则执行上面的命令后,把当前CS:100指向的内存开始的数据写入到ABC.DA T文件中,写入字节大小有BX和CX中大小规定。假定要将起始地址为DS:200 的内存内容写入到驱动器A的磁盘中。需要将数据从磁盘的逻辑扇区号10H 开始并持续10H个扇区。则键入下面命令:-W DS:200 0 10 10 ★XA命令使用

说明:要使用扩展内存,必须安装符合 4.0 版的Lotus/Intel/Microsoft 扩展内存规范(LIM EMS) 的扩展内存设备驱动程序。如果指定的页面数可用,则将显示消息表明所创建的句柄的十六进制数;否则显示相关的错误消息。要分配扩展内存的8个页面,键入下面命令:-XA8 执行指令后,若执行成功,显示下面消息:Handle created=0003 若失败,则可能显示:EMS not installed -★XD命令使用说明:见XA命令说明若要释放句柄0003,键入下面命令:-XD 0003 执行指令后,若执行成功,显示下面消息:Handle 0003 deallocated 若失败,则可能显示:EMS not installed -★XM命令使用说明:见XA命令说明若要将句柄0003 的逻辑页3映射到物理页4,键入下面命令:-XM 3 4 0003 执行指令后,若执行成功,显示下面消息:Logical page 03 mapped to physical page 04 ★XS 命令使用

说明:见XA命令说明

三、DEBUG的有关说明

(1)在DEBUG状态下,所有输入的数值都不能带有后缀区分进制,输入的数值都为16进制数;(2)命令可大写或小写,DEBUG命令对大小不敏感;(3)可以用+键来停止一个命令的执行返回DEBUG状态(4)每个命令只有在回车后才有效;(5)按+键可暂停移动显示,按任一键继续;(6)在DEBUG状态下面,输入?可以得到所有DEBUG命令的使用说明;

微机原理全部指令用法

一.机械码,又称机器码. ultraedit打开,编辑exe文件时你会看到 许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码 就是机器码. 修改程序时必须通过修改机器码来修改exe文件. 二.需要熟练掌握的全部汇编知识(只有这么多) 不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了 cmp a,b 比较a与b mov a,b 把b的值送给a ret 返回主程序 nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面 (解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop) call 调用子程序 je 或jz 若相等则跳(机器码74 或0F84) jne或jnz 若不相等则跳(机器码75或0F85) jmp 无条件跳(机器码EB) jb 若小于则跳 ja 若大于则跳 jg 若大于则跳 jge 若大于等于则跳 jl 若小于则跳 jle 若小于等于则跳 pop 出栈 push 压栈 三.常见修改(机器码) 74=>75 74=>90 74=>EB 75=>74 75=>90 75=>EB jnz->nop 75->90(相应的机器码修改) jnz -> jmp 75 -> EB(相应的机器码修改) jnz -> jz 75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改) 四.两种不同情况的不同修改方法 1.修改为jmp je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息

微机原理之名词解释

CPU:中央处理器,是一台计算机的运算核心和控制核心 EU:执行部件,负责指令的译码、执行和数据的运算 BIU:总线接口部件,管理CPU与系统总线的接口,负责CPU对存储器和外设进行访问 IP:指令指针寄存器,指示主存储器指令的位置 SP:堆栈指示寄存器,指示堆栈栈顶的位置(偏移地址) CS:代码段寄存器,指示当前代码段的起始位置 DS:数据段寄存器,指示当前数据段的起始位置 SS:堆栈段寄存器,指示当前对战短的起始位置 时钟周期:CLK时钟信号的周期,是CPU的最小时间单位,也叫T状态 总线周期:CPU通过系统总线对存储器或接口进行一次访问的时间 指令周期:完整执行一条指令所用时间 段寄存器:是因为对内存的分段管理而设置的,8086/8088具有4个16位段寄存器:CS、DS、SS、ES 字节:相邻八位二进制数 物理地址:1MB存储区域中某一单元的实际地址 逻辑地址:由段基地址和偏移地址(偏移量)组成,存储单元的地址可以用段基地址和段内偏移量来表示,段基地址确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表 示方式称为逻辑地址 BCD码:用四位二进制数表示一位十进制的编码 ASCII码:由8位二进制数组成,用来表示26个英文大小写字母以及一些特殊符号,便于计算机的识别的一种编码 堆栈:一种数据项按序排列的数据结构,采用“先进后出”或“后进先出”的存取操作方式 汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序 指示性语句:不可执行语句,汇编时不产生目标代码,用于指示汇编程序如何编译源程序 指令性语句:可执行语句,在汇编中要产生相应的目标代码,CPU根据这些代码执行相应操作 伪指令:即指示性语句 OFFSET:返回变量或标号的偏移地址 ASSUME:明确段寄存器与逻辑段之间的关系 SEGMENT:定义一个逻辑段,并给逻辑段赋予一个段名 ORG:控制位置计数器,把表达式的值赋给当前位置计数器$ RAM:随机存取存储器,CPU可对RAM的内容进行随机的读写访问 ROM:只读存储器,存储器的内容只能随机的读出而不能写入 EPROM:用紫外光擦除,擦除后可编程,允许用户多次擦除和编程的只读存储器 接口:CPU和存储器、外部设备或者两种外部设备,或者两种机器之间通过系统总线进行连接的逻辑部件(或称电路),它是CPU与外界进行信息交换的中转站,是CPU与外界交换信息的通道 I/O 端口:输入输出端口,用于CPU和外部设备连接和数据交换的接口,能被指令直接寻址的输入输出口 I/O 端口独立编址:从存储空间划出一部分地址空间给I/O设备,把I/O接口中的端口当作存储器单元一样进行访问,不设置专门的I/O指令的编址方式,也称存储器映射编址 I/O 端口统一编址:对接口中的端口单独编址而不占用存储空间,使用专门的I/O指令对端口进行操作的编址方式,也叫I/O映射编址 总线:连接两个以上数字系统元器件的信息通路,是传递信息的一组共用信号线(导线) 中断:指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序。 中断源:引起中断的原因或发出中断申请的来源 软件中断:CPU执行指令引起的中断

微机原理指令整理..

类别指 令 类 型 指令名称指令缩写指令功能影响标志格式格式含义源操作数目的操作数 传送指令通 用 传 输 指 令 基本传输 指令 MOV 将源操作数中的数据传送至目的操 作数,以实现寄存器与寄存器、寄 存器与存储器之间数据传送以及立 即数送往寄存器或存储器 无 1.MOV WORD PTR [2000],AX 将AX送2000和 2001单元(低位 在低地址,高位 在高地址,下同) 至少有一个是寄存器 (除立即数送存储器 外); 不能在两个存储单元之 间直接传送数据; 不能在两个段寄存器之 间直接传送数据; 不能将立即数直接送至 段寄存器;SS和SP赋 值必须紧邻 指令指针IP既不作目 的操作数也不做源操作 数 2.MOV AX,ES:[BX+SI+50] 将ES段 (BX+SI+50)字 单元内容送AX 3.MOV SS,BX 将BX内容送SS 4.MOV ES,SS:[DI+200] 将SS段(DI+200) 字单元内容送ES 5.MOV BX,CX 将CS内容送BX 6.MOV WORD PTR [BX+DI],SS 将SS内容送 (BX+DI)字单元 CS不能作目 的操作数; 立即数不能 作目的操作 数 7.MOV CL,DH 将DH内容送CL 8.MOV DI,[SI+100] 将(SI+100)字 单元内容送DI 9.MOV WORD PTR [DI],DX 将DX内容送(DI) 字单元 10.MOV CX,3330 立即数3330送 微机原理指令整理 1

微机原理指令整理 2 CX 11.MOV BYTE PTR [DI],0 立即数0送(DI) 字节单元 堆栈操作 指令 PUSH 将来自通用寄存器、段寄存器或存储单元的一个字(16位)内容压入堆栈(SP 指向的栈顶个单元) 无 1.PUSH AX AX 内容进栈 通用寄存器、段寄存器、存储单元的一个字 CS 不能作目的操作数; 2.PUSH SI SI 内容进栈 3.PUSH ES ES 内容进栈 4.PUSH CS CS 内容进栈 5.PUSH WORD PTR [BX] (BX)和(BX+1)单元内容进栈 6.PUSH WORD PTR BETA [BX] (BX+BETA)字单元内容进栈 不能使用8位源或目的操作数 POP 将栈顶个单元的内容退出(弹出)到通用寄存器、段寄存器或存储单元 无 1.POP BX 栈顶2个字节出栈到BX 不能使用8位源或目的操作数 2.POP DX 栈顶2个字节出栈到DX 通用寄存器、段寄存器、存储单元的一个字节; CS 不能作目的操作数 3.POP ES 栈顶2个字节出栈到ES 4.POP SS 栈顶2个字节出栈到SS 5.POP [BX+50] 栈顶2个字节出栈到(BX+50)字单元 6.POP [BP+DI] 栈顶2个字节出栈到(BP+DI )字单元

汇编语言调试DEBUG命令详解

汇编语言调试DEBUG命令详解 1、显示命令D ① D [地址] ② D [范围] 如不指定范围,一次显示8行×16个字节。 -D ;默认段寄存器为DS,当前偏移地址 -D DS:100 / -D CS:200 -D 200:100 -D 200;200为偏移地址,默认段寄存器DS -D DS:100 110/ -D 100 L 10 2.修改命令E ① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。 ② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。 -E DS:100 F3 ‘AB’ 8D。 3.添充命令F F 范围数据表; 将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。 -F DS:0 L5 01,02,03,04,05 -F DS:0 L5 01 02 03 04 05(空格分隔) -F DS:0 L5 FF ;5个字节重复使用FF 4.显示修改寄存器命令R R;★显示所有寄存器和标志位状态; ★显示当前CS:IP指向的指令。 显示标志时使用的符号: 标志标志=1 标志=0 OF OV NV DF DN UP IF EI DI SF NG PL ZF ZR NZ AF AC NA PF PE PO CF CY NC

5.汇编命令A A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。 注释:①在DEBUG下编写简单程序即使用A命令。 ②每条指令后要按回车。 ③不输入指令按回车,或按Ctrl+C结束汇编。 ④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。 6.反汇编命令U ① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。 ② U 范围;对指定范围的单元进行反汇编。 -U -U100 -U100L10 7.运行程序命令G ① G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。 ② G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。 ③ G 断点1[,断点2,…断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。 ④G=地址断点1[,断点2,…断点10] -G ;从CS:IP指向的指令开始执行程序。 -G=100 ;从指定地址开始执行程序。 -G=100 105 110 120 8.跟踪命令(单步执行命令)T ① T;从当前IP开始执行一条指令。 ② T 数值;从当前IP开始执行多条指令。 ② T =地址; ③ T =地址数值; -T -T5 / -T=100 5 9.跟踪执行并跳过子程序命令P P [=地址] [数值];类似T命令,但跳过子程序和中断服务程序。 10.退出DEBUG命令Q Q;返回DOS环境。 -Q 11.命名命令N N 文件标示符;指定文件,以便用W命令在磁盘上生成该文件,或者用L命令从磁盘装入该文件。 -N MY_https://www.wendangku.net/doc/3310933347.html,

微机原理指令汇总情况

我现将指令系统中各种助记符的英文全名写出来,各种助记符的记忆就会变得很简单o(∩_∩)o... 在这之前,先说一下寄存器: 数据寄存器分为: 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)

微机原理[第三版]课后练习答案解析

1 思考与练习题 一、选择题 1.计算机硬件中最核心的部件是( )。C A.运算器 B.主存储器 C.CPU D.输入/输出设备 2.微机的性能主要取决于( )。 A (B——计算机数据处理能力的一个重要指标) A.CPU B.主存储器 C.硬盘 D.显示器 3.计算机中带符号数的表示通常采用( )。C A.原码 B.反码 C.补码 D.BCD码 4.采用补码表示的8位二进制数真值范围是( )。C A.-127~+127 B.-1 27~+128 C.-128~+127 D.-128~+128 5.大写字母“B”的ASCII码是( )。B A.41H B.42H C.61H D.62H 6.某数在计算机中用压缩BCD码表示为10010011,其真值为( )。C A.10010011B B.93H C.93 D.147 二、填空题 1.微处理器是指_CPU_;微型计算机以_CPU_为核心,配置_内存和I/O接口_构成;其特点是_(1)功能强 (2)可靠性高 (3)价格低 (4)适应性强 (5)体积小 (6)维护方便_。P8 P5 2.主存容量是指_RAM和ROM总和_;它是衡量微型计算机_计算机数据处理_能力的一个重要指标;构成主存的器件通常采用_DRAM和PROM半导体器件_。P5 P9 3.系统总线是_CPU与其他部件之间传送数据、地址和控制信息_的公共通道;根据传送内容的不同可分成_数据、地址、控制_3种总线。P9 4.计算机中的数据可分为_数值型和非数值型_两类,前者的作用是_表示数值大小,进行算术运算等处理操作_;后者的作用是_表示字符编码,在计算机中描述某种特定的信息_。P12 5.机器数是指_数及其符号在机器中加以表示的数值化_;机器数的表示应考虑_机器数的范围、机器数的符号、机器数中小数点位置_3个因素。P15 P16 6.ASCII码可以表示_128_种字符,其中起控制作用的称为_功能码_;供书写程序和描述命令使用的称为_信息码_。P18 P19 三、判断题 1.计算机中带符号数采用补码表示的目的是为了简化机器数的运算。( )√ 2.计算机中数据的表示范围不受计算机字长的限制。( )× 3.计算机地址总线的宽度决定了内存容量的大小。( )√ 4.计算机键盘输入的各类符号在计算机内部均表示为ASCII码。( )× (键盘与计算机通信采用ASCII码) 2 思考与练习题 一、选择题 1.在EU中起数据加工与处理作用的功能部件是( )。A A.ALU B.数据暂存器 C.数据寄存器 D.EU控制电路 2.以下不属于BIU中的功能部件是( )。 B A.地址加法器 B.地址寄存器 C.段寄存器 D.指令队列缓冲器

微机原理指令合集

地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断(INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例:MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src)比较指令:CMP dst,src(相减但不送回目的操作数,结果都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量)段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回:RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD

实验一--掌握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

微机原理简答

1.一般微处理器内部结构由哪三部分组成?P6 运算器(算术逻辑单元),控制器,内部寄存器 2.接口按功能可分为那几类?P242 通用接口和专用接口 3.3.接口的主要功能有那几种?P243 缓冲锁存数据,地址译码,传送命令,码制转换,电平转换 4.典型的微机硬件结构是用什么将各部位连接起来的? 总线 5.什么是计算机的位长?P8 计算机数据总线上一次能处理的信息的位数即位长 6.什么是CPU总线的带宽?P23 总线的带宽是指总线能同时传输的数据位数量 7.什么是CPU总线的工作频率?P23 用于协调总线上各种操作的时钟频率 8.什么是Intel8086指令的直接寻址方式?P77 指令中以位移量方式直接给出操作数的有效地址EA 9.64*1bit的DRAM芯片通常有多少个地址线引脚和数据线引脚? 6地址线引脚和1数据线引脚 10.Intel8086系统中条件转移指令的转移范围有什么限制? -128—127 11.中断向量表: 也称中断入口地址表。该表说明了中断类型号和中断服务程序的入口地址之间的联系。P235 12.中断:就是使CPU暂停运行原来的程序,按照更为急迫事件的需要转去执行为中断源服务的程序,待该程序处理完后,再返回运行原程序,此即中断。P223 13.总线:是用来传送信息的公共导线,可分为数据总线,地址总线,控制总线。P4??? 14.有效地址:表示所寻址的地址单元距离段起地址的之间的偏移字节的多少,也称偏移地址。P69 15.指令周期:指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。百度百科。P10

微机原理常用命令

一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。 1. 通用数据传送指令 MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) XLAT 字节查表转换. ── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

掌握DEBUG基本命令

实验课程名称微型计算机原理实验报告_实验项目名称掌握DEBUG基本命令_专业班级电子信息科学与技术101班_学生姓名____________ 学号_____ 实验成绩 指导教师签字

贵 州 大 学 实 验 报 告 纸 系 别 班 级 姓 名 学号 课 程 名 称 成 绩 评 定 教师签名 实 验 时 间 2011年 11 月 23 日 一、实验目的 (1)熟悉DEBUG 有关命令的使用方法。 (2)利用DEBUG 掌握有关指令的功能。 (3)利用DEBUG 运行简单的程序段。 二、实验内容 Ⅰ.掌握DEBUG 程序的各种命令,重点掌握U ,G ,T ,D ,E ,R 命令。 ⒈ 反汇编命令:-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U 命令的最后一条指令的下一个单元开始显示32个字节。

⒉运行命令G: ⒊追踪命令T,有两种格式: 1)逐条指令追踪:-T[=地址] 该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。 2)多条指令追踪: -T[=地址][值] 该命令从指定地址起执行n条命令后停下来,n由[值]确定。 ⒋显示内存单元内容的命令D,格式为: -D[地址]或-D[范围] 1)D命令后跟寄存器表示的地址 2)D命令后不加地址

3)D命令后加直接地址 ⒌修改内存单元内容的命令E,用给定的内容代替指定范围的单元内容: -E地址内容表 6.检查和修改寄存器内容的命令R,它有三种方式: 1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R 2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名 3)显示和修改标志位状态,命令格式为:-RF

相关文档