汇编大作业_命令行参数
- 格式:pptx
- 大小:89.49 KB
- 文档页数:4
DEBUG主要命令DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1.DEBUG程序的调用在DOS的提示符下,可键入命令:C:>DEBUG [d:][path][文件名][参数1][参数2]其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。
2.DEBUG的主要命令⑴显示内存单元内容的命令D,格式为:-D [地址] 或-D [范围]例如,显示指定范围内存单元内容的方法为:-D 100 1FF18E4:0100 47 06 04 02 38 01 47 06 -06 02 00 02 47 06 08 02 G...8.G.....G...18E4:0110 02 02 3B 04 02 68 02 00 -4D 20 50 51 56 57 8B 37 ..;..h..M PQVW.7 其中左边为十六进制表示形式,右边为ASCII码表示形式,“.”表示不可显示字符。
这里没有指定段地址,D命令自动显示DS段的内容。
⑵修改内存单元内容的命令E,它有两种格式1)用给定内容代替指定范围的单元内容,格式为:-E 地址内容表例如:-E DS:100 F358595A8D,即用F3,58,59,5A,8D五个字节代替内存单元DS:100到DS:104的内容。
2)逐个单元相继地修改,格式为:-E 地址例如:-E DS:10018E4:0100 89.78此命令是将0100单元内容89改为78。
78是程序员从键盘输入的。
程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。
⑶检查和修改寄存器内容的命令R,它有三种方式1)显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态-R该命令可显示AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP及标志寄存器内容。
指令格式(16进制)机器码(2进制)机器码ADD r/m8,r8 00 /r 00 000 0 0 0 oorrrmmm ADD r/m32,r32 01 /r 00 000 0 0 1 oorrrmmm ADD r/m16,r16 01 /r 00 000 0 0 1 oorrrmmm ADD r8,r/m8 02 /r 00 000 0 1 0 oorrrmmm ADD r16,r/m16 03 /r 00 000 0 1 1 oorrrmmm ADD r32,r/m32 03 /r 00 000 0 1 1 oorrrmmm 前6位全为0ADD AL, imm8 04 ib 00 000 1 0 0 ibADD EAX, imm32 05 id 00 000 1 0 1 idADD AX, imm16 05 iw 00 000 1 0 1 iw前5位为0,第6,7位为10???第6位为0有MOD域PUSH ES 06 00 000 1 1 0POP ES 07 00 000 1 1 1前5位为0,第6,7位为11OR r/m8,r8 08 /r 00 001 000 oorrrmmm OR r/m16,r16 09 /r 00 001 001 oorrrmmm OR r/m32,r32 09 /r 00 001 001 oorrrmmm OR r8,r/m8 0A /r 00 001 010 oorrrmmm OR r16,r/m16 0B /r 00 001 011 oorrrmmmOR r32,r/m32 0B /r 00 001 011 oorrrmmm 前4位为0,第5,6位为10OR AL, imm8 0C ib 00 001 1 0 0 ibOR EAX, imm32 0D id 00 001 1 0 1 idOR AX, imm16 0D iw 00 001 1 0 1 iw前4位为0,第5,6位为11PUSH CS 0E 00 001 1 1 0这里没有0F 0F是以后用于扩展00 001 1 1 1ADC r/m8,r8 10 /r 00 010 0 0 0 oorrrmmm ADC r/m32,r32 11 / r 00 010 0 0 1 oorrrmmm ADC r/m16,r16 11 /r 00 010 0 0 1 oorrrmmm ADC r8,r/m8 12 /r 00 010 0 1 0 oorrrmmm ADC r16,r/m16 13 /r 00 010 0 1 1 oorrrmmm ADC r32,r/m32 13 /r 00 010 0 1 1 oorrrmmm 前5位为00010,6、7位为01ADC AL, imm8 14 ib 00 010 100 ibADC EAX, imm32 15 id 00 010 101 idADC AX, imm16 15 iw 00 010 101 iw前5位为00010,6、7位为10PUSH SS 16 00 010 1 1 0POP SS 17 00 010 1 1 1前5位为00010,6、7位为11SBB r/m8,r8 18 /r 00 011 000 oorrrmmm SBB r/m32,r32 19 / r 00 011 001 oorrrmmm SBB r/m16,r16 19 /r 00 011 001 oorrrmmm SBB r8,r/m8 1A /r 00 011 010 oorrrmmm SBB r16,r/m16 1B /r 00 011 011 oorrrmmm SBB r32,r/m32 1B /r 00 011 011 oorrrmmm 前5位为00011,6位为0SBB AL, imm8 1C ib 00 011 100 ibSBB EAX, imm32 1D id 00 011 101 idSBB AX, imm16 1D iw 00 011 101 iw前5位为00011,6位为1PUSH DS 1E 00 011 1 10POP DS 1F 00 011 1 11前5位为00011,6、7位为11AND r/m8,r8 20 /r 00 100 000 oorrrmmm AND r/m16,r16 21 /r 00 100 001 oorrrmmm AND r/m32,r32 21 /r 00 100 001 oorrrmmm AND r8,r/m8 22 /r 00 100 010 oorrrmmmAND r16,r/m16 23 /r 00 100 011 oorrrmmm AND r32,r/m32 23 /r 00 100 011 oorrrmmm 前5位为00100,6位为0AND AL, imm8 24 ib 00 100 100 ibAND EAX, imm32 25 id 00 100 101 idAND AX, imm16 25 iw 00 100 101 iw前5位为00100,6位为1ES前缀26 00 100 11000 100 111 把al调为DAA 27前5位为00100,6位为1,后两位为11SUB r/m8,r8 28 /r 00 101 000 oorrrmmm SUB r/m32,r32 29 / r 00 101 001 oorrrmmm SUB r/m16,r16 29 /r 00 101 001 oorrrmmm SUB r8,r/m8 2A /r 00 101 010 oorrrmmmSUB r16,r/m16 2B /r 00 101 011 oorrrmmm SUB r32,r/m32 2B /r 00 101 011 oorrrmmm 前5位为00101,6位为 0SUB AL, imm8 2C ib 00 101 100 ibSUB EAX, imm32 2D id 00 101 101 idSUB AX, imm16 2D iw 00 101 101 iw前5位为00101,6位为1CS前缀2E 00 101 110DAS 2F 00 101 111前5位为00101,6位为1,后两位为11XOR r/m8,r8 30/r 00 110 000 oorrrmmm XOR r/m16,r16 31/r 00 110 001 oorrrmmm XOR r/m32,r32 31/r 00 110 001 oorrrmmm XOR r8,r/m8 32/r 00 110 010 oorrrmmm XOR r16,r/m16 33/r 00 110 011 oorrrmmm XOR r32,r/m32 33/r 00 110 011 oorrrmmm 前5位为00110,6位为 0XOR AL,imm8 34 ib 00 110 100 ibXOR EAX,imm32 35 id 00 110 101 idXOR AX,imm16 35 iw 00 110 101 iw前5位为00110,6位为 1SS前缀36 00 110 110AAA 37 00 110 111前5位为00110,6位为1,后两位为11CMP r/m8,r8 38 /r 00 111 000 oorrrmmm CMP r/m32,r32 39 /r 00 111 001 oorrrmmm CMP r/m16,r16 39 /r 00 111 001 oorrrmmm CMP r8,r/m8 3A /r 00 111 010 oorrrmmm CMP r16,r/m16 3B /r 00 111 011 oorrrmmm CMP r32,r/m32 3B /r 00 111 011 oorrrmmm 前5位为00111,6位为0CMP AL, imm8 3C ib 00 111 100 ibCMP EAX, imm32 3D id 00 111 101 idCMP AX, imm16 3D iw 00 111 101 iw前5位为00111,6位为1DS前缀3E 00 111 110AAS 3F 00 111 111以上为0-3开头的操作码,按2-3-1-1-1拆分,第六位定有无mod 域,为0有MOD域,3、4、5位决定功能(表1),为1无MOD域,看第7位,为1则看(表2),为0看(表1);(表1)第8位定操作数长度(表2)第8位定操作;经典呀!!INC r32 40+rd 01 0 00 000 +rdINC r16 40+rw 01 0 00 000 +rwDEC r32 48 +rd 01 0 01 000 +rdDEC r16 48 +rw 01 0 01 000 +rw前4位为0100后三位为000,第5位为0位为INC,为1为DEC PUSH r32 50+rd 01 0 10 000+rdPUSH r64 50+rd 01 0 10 000+rdPUSH r16 50+rw 01 0 10 000+rw前4位为0101,第5位为0,后3为000POP r32 58+rd 01 0 11 000+rdPOP r64 58+rd 01 0 11 000+rdPOP r16 58+rw 01 0 11 000+rw由第3位定最后三位是否为寄存器,4、5位定4种操作;按2-1-2-3拆分最规整中间两位定操作,最后3为定寄存器000是eax ……111是ediPUSHA 60 01 1 0 0 0 0 0 PUSHAD 60 01 1 0 0 0 0 0POPA 61 01 1 0 0 0 0 1POPAD 61 01 1 0 0 0 0 1前7位为0110000,最后一位为0为PUSHA,为1为POPABOUND r16,m16/16 62 /r 01 1 0 0 0 1 0 oorrrmmm BOUND r32,m48/48这里改成了4862 /r 01 1 0 0 0 1 0 oorrrmmmARPL r/m16,r16 这里改成16了63 /r01 1 0 0 0 1 1 oorrrmmm64 FS段超越64 01 1 0 0 1 0 065 GS段超越65 01 1 0 0 1 0 166 数据宽度66 01 1 0 0 1 1 067 地址宽度67 01 1 0 0 1 1 1 PUSH imm16 68 01 1 0 1 0 0 0 PUSH imm32 68 01 1 0 1 0 0 0特殊IMULr32,r/m32,imm32 69 /r id01 1 0 1 0 0 1 oorrrmmmidIMULr16,r/m16,imm16 69 /r iw01 1 0 1 0 0 1 oorrrmmmiwPUSH imm8 6A 01 1 0 1 0 1 0 特殊IMULr16,r/m16,imm8 6B /r ib01 1 0 1 0 1 1 oorrrmmmibIMULr32,r/m32,imm8 6B /r ib01 1 0 1 0 1 1 oorrrmmmib前6位为011010,最后一位为1 ,第7位为0时表示同类寄存器之间,为1表示的为不同类寄存器之间,第七位决定立即数宽度最后一位为0,表示push立即数,第七位为0表示8位立即数,第七位为1,表示16/32位立即数。
命令行参数规则一、什么是命令行参数?命令行参数是在执行命令行程序时传递给程序的一种方式,用于指定程序运行时的一些参数或选项。
通过命令行参数,我们可以在执行程序时动态地改变程序的行为,从而实现更灵活的控制。
二、命令行参数的格式命令行参数通常以空格分隔,可以包含多个参数,每个参数由一个独立的字符串表示。
一般情况下,参数由一个短横线(-)或两个短横线(--)开头,后面跟着参数名或选项。
三、常见的命令行参数规则1. 单个参数单个参数指的是只有参数名,没有参数值的情况。
例如,`--help`用于显示程序的帮助信息,`--version`用于显示程序的版本信息。
2. 参数名和参数值参数名和参数值之间通常用等号(=)或空格分隔。
例如,`--name=Tom`用于指定姓名为Tom,`--output-dir /path/to/directory`用于指定输出目录为`/path/to/directory`。
3. 布尔型参数布尔型参数表示一个开关,只需要指定参数名即可,不需要参数值。
例如,`--verbose`用于打开详细输出模式,`--debug`用于打开调试模式。
4. 位置参数位置参数是指不以参数名开头的参数,其位置决定了其含义。
例如,`cp file1 file2`中的`file1`和`file2`就是位置参数,表示要复制的源文件和目标文件。
5. 必选参数和可选参数有些参数是必选的,必须在命令行中指定;而有些参数是可选的,可以选择性地指定。
例如,`--name=Tom`是必选参数,而`--age=18`是可选参数。
6. 参数的顺序参数的顺序通常是没有限制的,可以按照任意顺序指定。
但有些参数可能有依赖关系,必须按照特定的顺序指定。
例如,`--input-file=file.txt --output-file=output.txt`,必须先指定输入文件,再指定输出文件。
7. 参数的重复有些参数可以重复出现,表示多次执行相同的操作。
命令行参数介绍摘要:1.命令行参数的定义与作用2.命令行参数的分类3.命令行参数的使用方法4.命令行参数的实例分析5.命令行参数的优缺点正文:命令行参数是指在命令行界面(CLI)中,用户在执行程序或命令时所输入的参数。
它们通常用于向程序提供额外的信息或指示,以便程序能够根据这些信息进行相应的操作或处理。
命令行参数在各种操作系统和应用程序中都有着广泛的应用,如在Linux 系统中的“ls”命令和在Python 编程语言中的“print”函数等。
命令行参数可以根据其作用和性质进行分类。
一般来说,命令行参数可以分为以下几类:1.位置参数:这类参数出现在命令行中的固定位置,并通常用于指定程序的输入文件、输出文件等。
例如,在“ls”命令中,“-l”参数用于以详细列表形式显示文件信息。
2.标志参数:这类参数通常以一个短横线“-”开头,用于表示一个布尔值或开关。
例如,在Python 编程语言中,“-n”参数用于禁止自动换行。
3.选项参数:这类参数用于为程序提供可选的附加功能或操作。
例如,在“tar”命令中,“-z”参数用于压缩文件。
在使用命令行参数时,用户需要根据程序的文档或帮助信息,了解参数的名称、格式和使用方法。
一些参数可能需要与其他参数一起使用,或者需要遵循特定的顺序。
此外,参数的值可能是选项参数,也可能是位置参数,这取决于参数的类型和程序的设计。
命令行参数具有以下优点:1.可以简化程序的使用,使用户能够通过输入参数快速地执行复杂操作。
2.可以提高程序的可扩展性和灵活性,使程序能够根据不同的参数值进行不同的处理。
3.可以方便地实现批处理操作,提高工作效率。
然而,命令行参数也存在一些缺点:1.对于新手用户来说,理解和使用命令行参数可能较为困难。
2.如果参数过多或使用不当,可能会导致程序的行为不确定或产生错误。
3.命令行参数的使用会影响程序的可移植性和跨平台性,因为不同操作系统的命令行参数可能存在差异。
总之,命令行参数是命令行界面中重要的组成部分,对于用户和程序员来说都具有重要的意义。
汇编语言指令大全及实例解析
汇编语言是一种底层的计算机语言,它直接操作计算机的硬件资源。
在汇编语言中,指令是最基本的操作单位,通过指令可以实现对计算机硬件的控制和操作。
本文将为大家介绍一些常用的汇编语言指令,并通过实例解析它们的具体用法和功能。
1. MOV指令。
MOV指令用于将数据从一个位置复制到另一个位置。
例如,下面的汇编代码将把寄存器AX中的值移动到寄存器BX中:
MOV BX, AX.
这条指令将AX中的值复制到BX中。
2. ADD指令。
ADD指令用于将两个操作数相加,并将结果存储到目标操作数中。
例如,下面的汇编代码将把寄存器AX和BX中的值相加,并将结果存储到AX中:
ADD AX, BX.
3. SUB指令。
SUB指令用于将目标操作数减去源操作数,并将结果存储到目标操作数中。
例如,下面的汇编代码将把寄存器AX中的值减去BX 中的值,并将结果存储到AX中:
SUB AX, BX.
4. CMP指令。
CMP指令用于比较两个操作数的大小,并根据比较结果设置标志位。
例如,下面的汇编代码将比较AX和BX中的值:
CMP AX, BX.
以上是一些常用的汇编语言指令及其实例解析。
通过学习和理解这些指令,我们可以更好地理解和掌握汇编语言的编程技巧,从而更好地编写高效的汇编语言程序。
希望本文对大家有所帮助。
汇编语⾔指令⼤全X86和X87汇编指令⼤全(带注释)⽬录⼀、数据传输指令1. 通⽤数据传送指令.2. 输⼊输出端⼝传送指令.3. ⽬的地址传送指令.4. 标志传送指令.⼆、算术运算指令三、逻辑运算指令四、串指令五、程序转移指令六、伪指令七、处理机控制指令:标志处理指令浮点运算指令集1、控制指令2、数据传送指令3、⽐较指令4、运算指令其它1.机械码,⼜称机器码.2.需要熟练掌握的全部汇编知识(只有这么多)3.常见修改(机器码)4.两种不同情况的不同修改⽅法⼀、数据传输指令它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.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.4. 标志传送指令.LAHF 标志寄存器传送,把标志装⼊AH.SAHF 标志寄存器传送,把AH内容装⼊标志寄存器.PUSHF 标志⼊栈.POPF 标志出栈.PUSHD 32位标志⼊栈.POPD 32位标志出栈.⼆、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的⼗进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEG 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),IMUL 整数乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).IDIV 整数除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04 SHL AX,CL四、串指令DS:SI 源串段寄存器 :源串变址.ES:DI ⽬标串段寄存器:⽬标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表⽰重复操作中SI和DI应⾃动增量; 1表⽰应⾃动减量.Z标志⽤来控制扫描或⽐较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串⽐较.( CMPSB ⽐较字符. CMPSW ⽐较字. )SCAS 串扫描.把AL或AX的内容与⽬标串作⽐较,⽐较结果反映在标志位.LODS 装⼊串.把源串中的元素(字或字节)逐⼀装⼊AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或⽐较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或⽐较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1. ⽆条件转移指令 (长转移)JMP ⽆条件转移指令CALL 过程调⽤RET/RETF 过程返回.2. 条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不⼩于或不等于时转移.JAE/JNB ⼤于或等于转移.JB/JNAE ⼩于转移.JBE/JNA ⼩于或等于转移.以上四条,测试⽆符号整数运算的结果(标志C和Z).JG/JNLE ⼤于转移.JGE/JNL ⼤于或等于转移.JL/JNGE ⼩于转移.JLE/JNG ⼩于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC ⽆进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3. 循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4. 中断指令INT 中断指令INTO 溢出中断IRET 中断返回5. 处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯⽚引线TEST为⾼电平时使CPU进⼊等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置⽅向标志位.CLD 清⽅向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建⽴段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CMC 进位位求反指令STC 进位位置为1指令CLD ⽅向标志置1指令STD ⽅向标志位置1指令CLI 中断标志置0指令STI 中断标志置1指令NOP ⽆操作HLT 停机WAIT 等待ESC 换码LOCK 封锁浮点运算指令集1、控制指令(带9B的控制指令前缀F变为FN时浮点不检查,机器码去掉9B)FINIT 初始化浮点部件机器码 9B DB E3FCLEX 清除异常机器码 9B DB E2FDISI 浮点检查禁⽌中断机器码 9B DB E1FENI 浮点检查禁⽌中断⼆机器码 9B DB E0WAIT 同步CPU和FPU 机器码 9BFWAIT 同步CPU和FPU 机器码 D9 D0FNOP ⽆操作机器码 DA E9FXCH 交换ST(0)和ST(1) 机器码 D9 C9FXCH ST(i) 交换ST(0)和ST(i) 机器码 D9 C1iiiFSTSW ax 状态字到ax 机器码 9B DF E0FSTSW word ptr mem 状态字到mem 机器码 9B DD mm111mmmFLDCW word ptr mem mem到状态字机器码 D9 mm101mmmFSTCW word ptr mem 控制字到mem 机器码 9B D9 mm111mmmFLDENV word ptr mem mem到全环境机器码 D9 mm100mmmFSTENV word ptr mem 全环境到mem 机器码 9B D9 mm110mmmFRSTOR word ptr mem mem到FPU状态机器码 DD mm100mmmFSAVE word ptr mem FPU状态到mem 机器码 9B DD mm110mmmFFREE ST(i) 标志ST(i)未使⽤机器码 DD C0iiiFDECSTP 减少栈指针1->0 2->1 机器码 D9 F6FINCSTP 增加栈指针0->1 1->2 机器码 D9 F7FSETPM 浮点设置保护机器码 DB E42、数据传送指令FLDZ 将0.0装⼊ST(0) 机器码 D9 EEFLD1 将1.0装⼊ST(0) 机器码 D9 E8FLDPI 将π装⼊ST(0) 机器码 D9 EBFLDL2T 将ln10/ln2装⼊ST(0) 机器码 D9 E9FLDL2E 将1/ln2装⼊ST(0) 机器码 D9 EAFLDLG2 将ln2/ln10装⼊ST(0) 机器码 D9 ECFLDLN2 将ln2装⼊ST(0) 机器码 D9 EDFLD real4 ptr mem 装⼊mem的单精度浮点数机器码 D9 mm000mmmFLD real8 ptr mem 装⼊mem的双精度浮点数机器码 DD mm000mmmFLD real10 ptr mem 装⼊mem的⼗字节浮点数机器码 DB mm101mmmFILD word ptr mem 装⼊mem的⼆字节整数机器码 DF mm000mmmFILD dword ptr mem 装⼊mem的四字节整数机器码 DB mm000mmmFILD qword ptr mem 装⼊mem的⼋字节整数机器码 DF mm101mmmFBLD tbyte ptr mem 装⼊mem的⼗字节BCD数机器码 DF mm100mmmFST real4 ptr mem 保存单精度浮点数到mem 机器码 D9 mm010mmmFST real8 ptr mem 保存双精度浮点数到mem 机器码 DD mm010mmmFIST word ptr mem 保存⼆字节整数到mem 机器码 DF mm010mmmFIST dword ptr mem 保存四字节整数到mem 机器码 DB mm010mmmFSTP real4 ptr mem 保存单精度浮点数到mem并出栈机器码 D9 mm011mmmFSTP real8 ptr mem 保存双精度浮点数到mem并出栈机器码 DD mm011mmmFSTP real10 ptr mem 保存⼗字节浮点数到mem并出栈机器码 DB mm111mmmFISTP word ptr mem 保存⼆字节整数到mem并出栈机器码 DF mm011mmmFISTP dword ptr mem 保存四字节整数到mem并出栈机器码 DB mm011mmmFISTP qword ptr mem 保存⼋字节整数到mem并出栈机器码 DF mm111mmmFBSTP tbyte ptr mem 保存⼗字节BCD数到mem并出栈机器码 DF mm110mmmFCMOVB ST(0),ST(i) <时传送机器码 DA C0iiiFCMOVBE ST(0),ST(i) <=时传送机器码 DA D0iiiFCMOVE ST(0),ST(i) =时传送机器码 DA C1iiiFCMOVNB ST(0),ST(i) >=时传送机器码 DB C0iiiFCMOVNBE ST(0),ST(i) >时传送机器码 DB D0iiiFCMOVNE ST(0),ST(i) !=时传送机器码 DB C1iiiFCMOVNU ST(0),ST(i) 有序时传送机器码 DB D1iiiFCMOVU ST(0),ST(i) ⽆序时传送机器码 DA D1iii3、⽐较指令FCOM ST(0)-ST(1) 机器码 D8 D1FCOMI ST(0),ST(i) ST(0)-ST(1) 机器码 DB F0iiiFCOMIP ST(0),ST(i) ST(0)-ST(1)并出栈机器码 DF F0iiiFCOM real4 ptr mem ST(0)-实数mem 机器码 D8 mm010mmmFCOM real8 ptr mem ST(0)-实数mem 机器码 DC mm010mmmFICOM word ptr mem ST(0)-整数mem 机器码 DE mm010mmmFICOM dword ptr mem ST(0)-整数mem 机器码 DA mm010mmmFICOMP word ptr mem ST(0)-整数mem并出栈机器码 DE mm011mmmFICOMP dword ptr mem ST(0)-整数mem并出栈机器码 DA mm011mmmFTST ST(0)-0 机器码 D9 E4FUCOM ST(i) ST(0)-ST(i) 机器码 DD E0iiiFUCOMP ST(i) ST(0)-ST(i)并出栈机器码 DD E1iiiFUCOMPP ST(0)-ST(1)并⼆次出栈机器码 DA E9FXAM ST(0)规格类型机器码 D9 E54、运算指令FADD 把⽬的操作数 (直接接在指令后的变量或堆栈缓存器) 与来源操作数 (接在⽬的操作数后的变量或堆栈缓存器) 相加,并将结果存⼊⽬的操作数FADDP ST(i),ST 这个指令是使⽬的操作数加上 ST 缓存器,并弹出 ST 缓存器,⽽⽬的操作数必须是堆栈缓存器的其中之⼀,最后不管⽬的操作数为何,经弹出⼀次后,⽬的操作数会变成上⼀个堆栈缓存器了FIADD FIADD 是把 ST 加上来源操作数,然后再存⼊ ST 缓存器,来源操作数必须是字组整数或短整数形态的变数FSUB 减FSUBPFSUBR 减数与被减数互换FSUBRPFISUBFISUBRFMUL 乘FMULPFIMULFDIV 除FDIVPFDIVRFDIVRPFIDIVFIDIVRFCHS 改变 ST 的正负值FABS 把 ST 之值取出,取其绝对值后再存回去。
汇编怎么取命令行参数2011-11-1421:1544人阅读评论(0)收藏举报PSP(Program Segment Prefix)(程序段前缀)汇编语言命令参数一、引言:如果大家用过TurboC2.0/3.0or BorlandC3.X等编译器编写DOS应用程序的李明博话,编写一个命令行参数形式的应用程序对大家来说是一件非常容易的事情,只要在主函main()中加几个参数就OK(int main(int argc,char*argv[],char*env[]){})。
相对汇编语言来说编写一个命令行参数基金鸿飞的程序就比较艰难,它要用到DOS的程序段前缀PSP(Program Segment Prefix)知识以及其他相关DOS知识。
(本文只对参数介绍,环境块不作讨论)二、相关知识:在DOS的科伦药业提示符下键入一个命令(内/外部命令)或程序的名字,DOS SHELL()首先根据名字判别其是内部命令还是外部命令或用户程序,若是内部命令则调用 暂驻在内存中的部分音乐现场的DOS内部命令代码,若是外部命令或用户程序,DOS SHELL则在当前目录和搜索路径中搜索匹配的文件名,找到了沃尔沃s80就加载程序,加载出错显示错误信息,找不到则显示Bad command or file name。
用户载DOS提示符下输入一串字符串,DOS SHELL把以回车(0Dh)为结束的这以字符串作为一个命令和参数进行解释,第一个空格以前的字符串为命令名(必须符合DOS命名规则),第一个空格(包括空格)到回车之间蔡依珊的字符作为命令或程序的参数。
程序段前缀--PSP是DOS加载一个外部命令或用户程序(扩展名为COM or EXE)时,在程序段前设置一个以节为边界,固定长度为10H (即256字节,一节为16字节)的黄智博存储块,PSP和程序段共有一个内存控制块(MCB),PSP位于每个程序的开始部分,无论是COM还是EXE,PSP的数据结构是相同老罗英语培训的。
MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用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=Tmp1.必须有一个操作数是在寄存器中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_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。