汇编语言学习知识指令速查表.doc
-*附 录附录A 常用80x86指令速查表指令按助记符字母顺序排列,缩写、符号约定如下:(1) 指令中,dst, src表示目的操作数和源操作数。仅一个操作数时,个别处也表示为opr。(2)imm表示立即数,8/16/32位立即数记作:imm8/imm16/imm32。(3)reg表示通用寄存器,8/16/32位通用寄存器记作:reg8/reg16/reg32。(4)mem表示内存操作数,8/16/32等内存操作数记作:mem8/mem16/mem32等。(5)seg表示段寄存器,CS, DS, SS, ES, FS, GS。(6)acc表示累加器,8/16/32累加器对应AL/AX/EAX。(7)OF, SF, ZF, AF, PF, CF分别表示为O, S, Z, A, P, C,相应位置为:字母,根据结果状态设置;?,状态不确定;-,状态不变;1,置1;0,清0;例如:0 S Z ? P -表示:OF清0,AF不确定,CF不变,其它根据结果设置。若该栏空白,则表示无关。(8)寄存器符号诸如(E)CX, (E)SI, (E)DI, (E)SP, (E)BP和(E)IP等,表示在16地址模式下使用16位寄存器(如CX),或在32地址模式下使用32位寄存器(如ECX)。(9)周期数表示指令执行所需的CPU时钟周期个数,即执行时间为:周期数/主频(秒)。(10)诸如(386+)是表示该指令只能用于80386及以后微处理器上。指 令功 能指 令 形 式周期数影响标志位AAA非压缩BCD加法调整,AH+进位AAA3?S Z ? P CAADAH10+ALAL,之后AH清0AAD10O S Z A P CAAMAL10的商AH,余数ALAAM18O S Z A P CAAS非压缩BCD减法调整,AH-借位AAS3? S Z ? P CADC dst, src带进位加法:dst+src+CFdstADC reg, reg1O S Z A P CADC reg, mem2ADC reg, imm1ADC acc, imm1ADC mem, reg3ADC mem, imm3ADD dst, src加法:dst+srcdstADD reg, reg1O S Z A P CADD reg, mem2ADD reg, imm1ADD acc, imm1ADD mem, reg3ADD mem, imm3续表指 令功 能指 令 形 式周期数影响标志位AND dst, src逻辑与:dstsrcdstAND reg, reg10 S Z ? P 0AND reg, mem2AND reg, imm1AND acc, imm1AND mem, reg3AND mem, imm3ARPL dst, src调整选择器的RPL域ARPL reg/mem16, reg167- - Z - - -BOUND reg, mem越界检查:(80188+)若reg值超出mem,则产生INT 5BOUND reg16, mem32INT+32BOUND reg32, mem64BSF reg, src从低到高扫描src,16/32位 (386+)若src=0,ZF清0,否则置1,位置regBSF reg, reg635? ? Z ? ? ?BSF reg, mem643BSR reg, src从高到低扫描src, 16/32位 (386+)若src=0,ZF清0,否则置1,位置regBSR reg, reg635? ? Z ? ? ?BSR reg, mem643BSWAP reg32反转reg32字节顺序 (486+)BSWAP reg321BT dst, src位测试 (386+)由dst指定的位CF (16/32位)BT reg, reg4? ? ? ? ? CBT reg, imm4BT mem, reg9BT mem, imm4BTC dst, src位测试并变反 (386+)dst的指定位CF, 然后该位变反,(16/32位)BTC reg, reg7? ? ? ? ? CBTC reg, imm7BTC mem, reg13BTC mem, imm8BTR dst, src位测试并清0 (386+)dst的指定位CF, 然后该位清0,(16/32位)BTR reg, reg7? ? ? ? ? CBTR reg, imm7BTR mem, reg13BTR mem, imm8BTS dst, src位测试并置1 (386+)dst的指定位CF, 然后该位置1,(16/32位)BTS reg, reg7? ? ? ? ? CBTS reg, imm7BTS mem, reg13BTS mem, imm8CALL dst子程序调用近调用:返回的偏移地址进栈,然后转至dst处执行;远调用:返回的段和偏移地址进栈,然后转至dst处执行CALL label(near)1CALL reg(near)2CALL mem(near)2CALL label(far)4CALL mem(far)5CBWAL符号扩展成AXCBW3CDQEAX符号扩展成EDX:EAXCDQ2CLCCF清0CLC2- - - - - 0CLDDF清0CLD2CLIIF清0,即关中断CLI7CLTS清除CR0中任务切换标志 (386+)CLTS10CMCCF取反,即CFCFCMC2- - - - - CCMOVcc reg, src条件成立srcreg, 16/32位 (586+)cc: 参见Jcc指令。CMOVcc reg, reg49CMOVcc reg, mem续表指 令功 能指 令 形 式周期数影响标志位CMP dst, src比较:dst-src,据此设置标志位CMP reg, reg1O S Z A P CCMP reg, mem2CMP reg, imm1CMP acc, imm1CMP mem, reg2CMP mem, imm2CMPSx串比较:(E)SI-ES:(E)DI,然后(E)SI, (E)DI增或减(1/2/4)x: B, W, D对应字节(1)字(2)双字(4)。DF=0增,否则减CMPSB5O S Z A P CCMPSWCMPSDCMPXCHG dst, regacc-dst, 等regdst,否则dstacc (486+)CMPXCHG reg/mem,reg5,6O S Z A P CCMPXCHG8B dstEDX:EAX-dst,等ECX:EBXdst,否则EDX:EAXdst (486+)CMPXCHG8B mem6410- - Z - - -CPUIDCPU标识EAX,EBX,ECX,EDXCPUID14CWDAX符号扩展成DX:AXCWD2CWDEAX符号扩展成EAXCWDE3DAA加法后的十进制调整ALDAA3? S Z A P CDAS减法后的十进制调整ALDAS3? S Z A P CDEC opropr自减1,即opr-1oprDEC reg1O S Z A P -DEC mem3DIV src无符号除法8位:AXsrc,商AL, 余数AH16位:DX:AXsrc,商AX, 余数DX32位:EDX:EAXsrc,商EAX,余数EDXDIV reg1741? ? ? ? ? ?DIV memENTER m, n建m字节局部空间,n级的栈帧 (286+)ENTER imm16, imm811+HLT暂停CPU,直到I/O中断发生HLTIDIV src有符号除8位:AXsrc,商AL, 余数AH16位:DX:AXsrc,商AX, 余数DX32位:EDX:EAXsrc,商EAX,余数EDXIDIV reg2246? ? ? ? ? ?IDIV memIMUL src有符号乘法8位:ALsrcAX16位:AXsrcDX:AX32位:EAXsrcEDX:EAXIMUL reg1011O ? ? ? ? CIMUL memIMUL reg, src有符号乘法 regsrcreg (286+)IMUL reg, reg/mem10O ? ? ? ? CIMUL reg, src,imm有符号乘法 srcimmreg (286+)IMUL reg, reg/mem,imm10O ? ? ? ? CIN acc, src端口数据accIN acc, imm87IN acc, DX7INC opropr自加1,即opr+1oprINC reg1O S Z A P -INC mem3续表指 令功 能指 令 形 式周期数影响标志位INSx端口DX数据ES:(E)DI,然后(E)DI增或减(1/2/4)x: B,W, D对应字节(1)字(2)双字(4);若DF=0增,否则减INSB9INSWINSDINT nFLAGS进栈,IF,TF置0,从4n双字单元取段和偏移地址,并转去执行 (实地址模式)INT 3INT+5INT imm8INT+6INTO若OF=1,则执行INT 4INTO4,INT+5INVD使Cache无效INVD15INVLPG使TLB入口无效INVLPG29IRET中断返回:从堆栈弹出返回的偏移和段地址,再弹出标志寄存器内容IRET7Jcc opr条件满足,则转移至oprJcc label1JA/JNBEopr高于(CF=0ZF=0)JA/JNBElabelJAE/JNB/JNCopr高于等于(CF=0)JAE/JNB/JNClabelJB/JC/JNAEopr低于(CF=1)JB/JC/JNAElabelJBE/JNAopr低于等于(CF=1ZF=1)JBE/JNAlabelJE/JZopr等于(ZF=1)JE/JZlabelJG/JNLEopr大于(ZF=0SF=OF)JG/JNLElabelJGE/JNLopr大于等于(SF=OF)JGE/JNLlabelJL/JNGEopr小于(SFOF)JL/JNGElabelJLE/JNGopr小于等于(ZF=1SFOF)JLE/JNGlabelJNE/JNZ opr不等于(ZF=0)JNE/JNZ labelJNOopr无溢出(OF=0)JNOlabelJNSopr非负数(SF=0)JNSlabelJOopr溢出(OF=1)JOlabelJP/JPEopr有偶数个1(PF=1)JP/JPElabelJPO/JNPopr有奇数个1(PF=0)JPO/JNPlabelJSopr负数(SF=1)JSlabelJCXZ opr若CX=0,则转移至oprJCXZ label6/5JECXZ opr若ECX=0,则转移至oprJECXZ label6/5JMP opr转移至opr近:转移后仅可改变(E)IP 远:转移后可改变(E)IP和CSJMP label(near)1JMP reg(near)2JMP mem(near)2JMP label(far)3JMP mem(far)4LAHF标志寄存器低字节AHLAHF2- - - - - -LAR reg, dst将dst指定的选择器访问权regLAR reg, reg/mem8- - Z - - -LDS reg, mem将mem内容DS : regLDS reg, mem4LEA reg, mem将mem的偏移地址regLEA reg, mem1LEAVE释放栈帧,即:(E)BP(E)SP,POP (E)BPLEAVE3LES reg, mem将mem内容ES : regLES reg, mem4LFS reg, mem将mem内容FS : reg (386+)LFS reg, mem4续表指 令功 能指 令 形 式周期数影响标志位LGDT mem将mem内容GDTR (286+)LGDT mem6LGS reg, mem将mem内容GS : reg (386+)LGS reg, mem4LIDT mem将mem内容IDTR (286+)LIDT mem6LLDT srcsrcLDTR (286+)LLDT reg/mem8LMSW srcsrc机器状态字(CR0低16位) (286+)LMSW reg/mem8LOCK 总线锁 (以便其他处理器处理指令)LOCK1LODSx从串取:(E)SIacc, 然后(E)SI增或减(1/2/4)x: B, W, D对应字节(1)字(2)双字(4);若DF=0增,否则减LODSB2LODSWLODSDLOOP opr(E)CX自减1, 若(E)CX0则转移LOOP label5/6LOOPE/LOOPZ opr(E)CX自减1, 若ZF=1(E)CX0则转移LOOPE/LOOPZ label7/8LOOPNE/LOOPNZ opr(E)CX自减1, 若ZF=0(E)CX0则转移LOOPNE/LOOPNZ label7/8LSL reg, srcsrc选择器确定的段界reg (286+)LSL reg, reg/mem8- - Z - - -LSS reg, mem将mem内容SS : reg (386+)LSS reg, mem4LTR srcsrc任务寄存器TR (286+)LTR reg16/mem1610MOV dst, src数据传送:srcdstMOV reg, reg1MOV reg, mem1MOV reg, imm1MOV mem, reg1MOV mem, imm1MOV acc, mem1MOV mem, acc1MOV dst, src控制寄存器内容传送 (386+)CRireg32, reg32CRi (i=0,2,3,4)MOV reg32, CRi4MOV CRi, reg321222MOV dst, src调试寄存器内容传送 (386+)DRireg32, reg32DRi (i=07)MOV reg32, DRi212MOV DRi, reg321112MOV dst, src段寄存器内容传送segdst, srcseg(CS除外)MOV reg/mem, seg1MOV seg, reg/mem212MOVSx串传送: (E)SIES:(E)DI, 然后(E)SI(E)DI增或减(1/2/4)x: B, W, D对应字节(1)字(2)双字(4);若DF=0增,否则减MOVSB4MOVSWMOVSDMOVSX reg, srcsrc经符号扩展后reg (386+)MOVSX reg, reg/mem3MOVZX reg, srcsrc经0扩展后reg (386+)MOVZX reg, reg/mem3MUL src无符号乘法8位:ALsrcAX16位:AXsrcDX:AX32位:EAXsrcEDX:EAXMUL reg1011O ? ? ? ? CMUL memNEG opropr求补(负),即-oproprNEG reg1O S Z A P CNEG mem3NOP空操作NOP1续表指 令功 能指 令 形 式周期数影响标志位NOT opropr按位取反,即:oproprNOT reg1O S Z A P CNOT mem3OR dst, src逻辑或,dstsrcdstOR reg, reg10 S Z ? P 0OR reg, mem2OR reg, imm1OR mem, reg3OR mem, imm3OR acc, imm1OUT dst, accacc内容端口dstOUT imm8, acc12OUT DX, acc12OUTSx(E)SI内容DX端口, (386+)然后(E)SI增或减(1/2/4)x: B, W, D对应字节(1)字(2)双字(4);若DF=0增,否则减OUTSB13OUTSWOUTSDPOP dst从堆栈弹出数据dst(E)SP增2或4, seg不能为CS)POP reg1POP mem3POP seg312POPA数据出栈DI, SI, BP, BX, DX, CX, AX(SP增28) (286+)POPA5POPAD堆栈弹出数据EDI,ESI,EBP,EBX,EDX,ECX,EAX (E)SP增48) (386+)POPAD5POPF数据出栈FLAGS (E)SP增2) (286+)POPF4O S Z A P CPOPFD数据出栈EFLAGS (E)SP增4) (386+)POPFD4O S Z A P CPUSH srcsrc数据进栈 (E)SP减2/4)(reg32,mem32,imm, 386+)PUSH reg1PUSH mem2PUSH imm1PUSH seg1PUSHAAX,CX,DX,BX,SP,BP,SI,DI进栈,(SP减28) (286+)PUSHA5PUSHADEAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI进栈, (E)SP减48) (386+)PUSHAD5PUSHFFLAGS进栈 (E)SP减2) (286+)PUSHF3PUSHFDEFLAGS进栈 (E)SP减4) (386+)PUSHFD3RCL dst, ndst带进位循环左移n位 dstCF注: n为imm8是386+支持RCL reg, 11O - - - - CRCL mem, 13RCL reg, CL724RCL mem, CL926RCL reg, imm8825RCL mem, imm81027RCR dst, ndst带进位循环右移n位 dstCF注: n为imm8是386+支持RCR reg, 11O - - - - CRCR mem, 13RCR reg, CL724RCR mem, CL926RCR reg, imm8825RCR mem, imm81027续表指 令功 能指 令 形 式周期数影响标志位RDMSRMSRECXEDX:EAX (586+)RDMSR2024RDTSC自启动以来CPU执行的时钟周期数EDX:EAX (586+)28REP 串指令当(E)CX0重复(E)CX自减1,再执行其后的串指令REP INSx11+3nREP LODSx7+3nREP MOVSx6,13nREP OUTSx13+4nREP STOSx6,9+3nREPE/REPZ串指令当(E)CX0ZF=1重复(E)CX自减1,再执行其后的串指令REPE/REPZ CMPSx7,8+4nO S Z A P CREPE/REPZ SCASx7,8+4nREPNE/REPNZ串指令当(E)CX0ZF=0重复(E)CX自减1,再执行其后的串指令REPNE/REPNZ CMPSx7,8+4nO S Z A P CREPNE/REPNZ SCASx7,8+4nRET n子程序返回:从堆栈弹出返回地址,若有n则返回后(E)SP再增n。近返回RETN:只弹出偏移地址;远返回RETF:弹出偏移和段地址;RETN2RETF4RETN imm163RETF imm164ROL dst, ndst循环左移n位 dstCF 注:n为imm8是386+支持ROL reg, 11O - - - - CROL mem, 13ROL reg, CL4ROL mem, CL4ROL reg, imm81ROL mem, imm83ROR dst, ndst循环右移n位 dstCF 注:n为imm8是386+支持ROR reg, 11O - - - - CROR mem, 13ROR reg, CL4ROR mem, CL4ROR reg, imm81ROR mem, imm83RSM从系统管理方式恢复RSMO S Z A P CSAHFAH标志寄存器的低8位SAHF1- S Z A P CSAL dst, ndst算术左移n位,即dst2ndst dstCF0注:n为imm8时,386+支持SAL reg, 11O - - - - CSAL mem, 13SAL reg, CL4SAL mem, CL4SAL reg, imm81SAL mem, imm83SAR dst, ndst算术右移n位,即dst2ndst dstCF注:n为imm8是386+支持SAR reg, 11O - - - - CSAR mem, 13SAR reg, CL4SAR mem, CL4SAR reg, imm81SAR mem, imm83续表指 令功 能指 令 形 式周期数影响标志位SBB dst, src带借位减法:dst-src-CFdstSBB reg, reg1O S Z A P CSBB reg, mem2SBB reg, imm1SBB acc, imm1SBB mem, reg3SBB mem, imm3SCASx串扫描:acc-ES:(E)DI,然后(E)DI增或减(1/2/4)x: B, W, D对应字节(1)字(2)双字(4);若DF=0增,否则减SCASB4O S Z A P CSCASWSCASDSETcc dst条件真,1dst,否则0dst, cc见Jcc (386+)SETcc reg8/mem838SGDT memGDTRmem (286+)SGDT mem4SHL dst, ndst逻辑左移n位,与SAL相同SHL/SAL是一条指令SHLD dst, reg, n双精度左移 (操作数:16/32位)(386+) dstCFregSHLD reg/mem, reg, imm84? S Z ? P CSHLD reg/mem, reg, CLSHR dst, ndst逻辑右移n位 dstCF0注:n为imm8时,386+支持SAR reg, 11O - - - - CSAR mem, 13SAR reg, CL4SAR mem, CL4SAR reg, imm81SAR mem, imm83SHRD dst, reg, n双精度右移 (操作数:16/32位)(386+)SHLD reg/mem, reg, imm84? S Z ? P C dstCFregSHLD reg/mem, reg, CLSIDT memIDTRmemSIDT mem4SLDT dstLDTRdstSLDT reg/mem2SMSW dst机器状态字(CR0低16位)dst (286+)SMSW reg/mem4STCCF置1STC2- - - - - 1STDDF置1STD2STIIF置1,即开中断STI7STOSx串存入:accES:(E)DI,然后(E)DI增或减(1/2/4)x: B, W, D对应字节(1)字(2)双字(4);若DF=0增,否则减STOSB3STOSWSTOSDSTR dst任务寄存器TRdstSTR reg/mem162SUB dst, src减法:dst-srcdstSUB reg, reg1O S Z A P CSUB reg, mem2SUB reg, imm1SUB acc, imm1SUB mem, reg3SUB mem, imm3续表指 令功 能指 令 形 式周期数影响标志位TEST dst, src与测试,dstsrc据此设置标志位TEST reg, reg20 S Z ? P 0TEST reg, mem1TEST reg, imm1TEST acc, imm1TEST mem, imm2VERR src若src确定的段可读,1ZF,否则0ZFVERR reg/mem167- - Z - - -VERW src若src确定的段可写,1ZF,否则0ZFVERW reg/mem167- - Z - - -WAIT等待,检查挂起未屏蔽的浮点异常WAIT1WBINVD写回Cache,并使之无效 (486+)WBINVD2000+WRMSREDX:EAXMSRECX (586+)WRMSR3035XADD dst, srcdstsrc,再dst+srcdst (486+)XADD reg/mem, reg3,4O S Z A P CXCHG dst, srcdst, src内容交换,即dstsrcXCHG reg/mem, reg3XCHG acc, reg2XLAT/XLATB查表换码:(E)BX+AL确定的单元值ALXLAT4XOR dst, src逻辑异或,dstsrcdstXOR reg, reg10 S Z ? P 0XOR reg, mem2XOR reg, imm1XOR acc, imm1XOR mem, reg3XOR mem, imm3附录B 编程练习环境说明1. 编程练习软件包附带软件包x86ASM是在Microsoft的MASM6.15软件包的基础上,加入CodeView、Win32的开发工具及Turbo C 2.0等,进行简单整理而成的,以便初学者编程练习使用。软件包中的基本文件有:MASM.EXE汇编程序LINK.EXE连接程序ML.EXE汇编连接程序(自动调用LINK.EXE)ML.ERR汇编错误信息文件LIB.EXE子程序库管理程序LIB16.EXE16位子程序管理程序LINK16.EXE生成DOS程序的连接程序LIB32.EXEWin32的库管理程序LINK32.EXE生成Win32程序的连接程序CV目录CodeView调试程序CV.EXE及相应的环境INC32目录Win32的API的函数库声明文件LIB32目录Win32的API的函数库TC目录Turbo C 2.0命令行环境和集成环境SET2ML16.BATML默认使用LINK16.EXE连接程序SET2ML32.BATML默认使用LINK32.EXE连接程序使用这个软件包既可以用来练习编写DOS环境下的应用程序,也可以用来练习编写Win32环境下的应用程序。提供TC的目的是用它来练习16位环境下汇编语言程序模块和C程序模块的连接。2.DOS系统下的编程练习环境真正的DOS是运行在实模式下的一个操作系统,所以DOS程序是运行在16位地址模式下的。这种模式下的程序具有这样的特点:(1) 偏移地址是16位,所表示的偏移地址只能是064K-1。在默认情况下,指令处理的数据类型是16位的,但也可以处理32位数据。(2) 应用程序可以访问所有的计算机系统资源,可以使用I/O指令直接与外设交换数据,也可以用INT指令调用DOS环境下的系统功能(DOS和BIOS)。在DOS系统下有很多系统功能调用可用,但是这里仅将DOS环境作为编程练习的平台,所以只须如下所述的很少几个系统功能就足够了,主要解决字符的输入、输出,以及应用程序退出返回。如果读者需要开发DOS系统下的应用程序,则必须另外参阅相关的系统资料手册。1) 编程练习所用的DOS系统调用(1) 功能01h。从标准输入设备输入一个字符,并回显。入口:AH01h出口:AL输入字符的ASCII码(2) 功能02h。向标准输出设备输出一个字符。入口:AH02hDL待输出字符的ASCII码出口:无(3) 功能08h。从标准输入设备输入一个字符,无回显。入口:AH08h出口:AL输入字符的ASCII码(4) 功能09h。输出一个字符串到标准输出设备上。入口:AH09hDS:DX待输出字符串的地址(字符串须以$作为其结束标志)出口:无 (5) 功能0Ah。从标准输入设备上读入字符串(以回车结束,有回显)。入口:AH0AhDS:DX输入缓冲区地址(字节0须填入允许输入字符数)。出口:输入缓冲区字节1存放输入的字符数,字节2起存放输入的字符串(6) 功能0Bh。检查标准输入设备上是否有字符可读。入口:AH0Bh出口:AL00h无字符可读;FFh有字符可读(7) 功能4Ch。终止程序的执行,并可返回一个代码。入口:AH4ChAL返回的代码出口:无2) 示例程序Demo16.ASM编写程序Demo16.ASM,输入一个字符和一个字符串,并显示。_STACKSEGMENT STACK STACK USE16; 定义堆栈段DB2046 DUP(0); 堆栈区长度:2KBTOSDW0; 初始堆栈栈顶_STACKENDS; 堆栈段定义结束_DATASEGMENT DATA USE16; 定义数据段MsgDB13, 10, Hello, World!, 13,10,$C1DB13, 10, Character is: *, 13, 10, $S2DB13, 10, Buffer content is: BufferDB9, 0, 10 DUP(*), 13, 10, $_DATAENDS; 数据段定义结束_TEXTSEGMENT CODE USE16; 定义代码段ASSUME CS: _TEXT, DS:_DATA, SS:_STACKStart:MOVAX, _DATA; 取数据内存区段地址MOVDS, AX; 设置数据段寄存器CLI; 设置堆栈期
收藏
- 资源描述:
-
-*
附 录
附录A 常用80x86指令速查表
指令按助记符字母顺序排列,缩写、符号约定如下:
(1) 指令中,dst, src表示目的操作数和源操作数。仅一个操作数时,个别处也表示为opr。
(2)imm表示立即数,8/16/32位立即数记作:imm8/imm16/imm32。
(3)reg表示通用寄存器,8/16/32位通用寄存器记作:reg8/reg16/reg32。
(4)mem表示内存操作数,8/16/32等内存操作数记作:mem8/mem16/mem32等。
(5)seg表示段寄存器,CS, DS, SS, ES, FS, GS。
(6)acc表示累加器,8/16/32累加器对应AL/AX/EAX。
(7)OF, SF, ZF, AF, PF, CF分别表示为O, S, Z, A, P, C,相应位置为:字母,根据结果状态设置;?,状态不确定;-,状态不变;1,置1;0,清0;例如:0 S Z ? P -表示:OF清0,AF不确定,CF不变,其它根据结果设置。若该栏空白,则表示无关。
(8)寄存器符号诸如(E)CX, (E)SI, (E)DI, (E)SP, (E)BP和(E)IP等,表示在16地址模式下使用16位寄存器(如CX),或在32地址模式下使用32位寄存器(如ECX)。
(9)周期数表示指令执行所需的CPU时钟周期个数,即执行时间为:周期数/主频(秒)。
(10)诸如(386+)是表示该指令只能用于80386及以后微处理器上。
指 令
功 能
指 令 形 式
周期数
影响标志位
AAA
非压缩BCD加法调整,AH+进位
AAA
3
?S Z ? P C
AAD
AH10+ALAL,之后AH清0
AAD
10
O S Z A P C
AAM
AL10的商AH,余数AL
AAM
18
O S Z A P C
AAS
非压缩BCD减法调整,AH-借位
AAS
3
? S Z ? P C
ADC dst, src
带进位加法:dst+src+CFdst
ADC reg, reg
1
O S Z A P C
ADC reg, mem
2
ADC reg, imm
1
ADC acc, imm
1
ADC mem, reg
3
ADC mem, imm
3
ADD dst, src
加法:dst+srcdst
ADD reg, reg
1
O S Z A P C
ADD reg, mem
2
ADD reg, imm
1
ADD acc, imm
1
ADD mem, reg
3
ADD mem, imm
3
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
AND dst, src
逻辑与:dstsrcdst
AND reg, reg
1
0 S Z ? P 0
AND reg, mem
2
AND reg, imm
1
AND acc, imm
1
AND mem, reg
3
AND mem, imm
3
ARPL dst, src
调整选择器的RPL域
ARPL reg/mem16, reg16
7
- - Z - - -
BOUND reg, mem
越界检查:(80188+)
若reg值超出mem,则产生INT 5
BOUND reg16, mem32
INT+32
BOUND reg32, mem64
BSF reg, src
从低到高扫描src,16/32位 (386+)
若src=0,ZF清0,否则置1,位置reg
BSF reg, reg
6~35
? ? Z ? ? ?
BSF reg, mem
6~43
BSR reg, src
从高到低扫描src, 16/32位 (386+)
若src=0,ZF清0,否则置1,位置reg
BSR reg, reg
6~35
? ? Z ? ? ?
BSR reg, mem
6~43
BSWAP reg32
反转reg32字节顺序 (486+)
BSWAP reg32
1
BT dst, src
位测试 (386+)
由dst指定的位CF (16/32位)
BT reg, reg
4
? ? ? ? ? C
BT reg, imm
4
BT mem, reg
9
BT mem, imm
4
BTC dst, src
位测试并变反 (386+)
dst的指定位CF, 然后该位变反,
(16/32位)
BTC reg, reg
7
? ? ? ? ? C
BTC reg, imm
7
BTC mem, reg
13
BTC mem, imm
8
BTR dst, src
位测试并清0 (386+)
dst的指定位CF, 然后该位清0,
(16/32位)
BTR reg, reg
7
? ? ? ? ? C
BTR reg, imm
7
BTR mem, reg
13
BTR mem, imm
8
BTS dst, src
位测试并置1 (386+)
dst的指定位CF, 然后该位置1,
(16/32位)
BTS reg, reg
7
? ? ? ? ? C
BTS reg, imm
7
BTS mem, reg
13
BTS mem, imm
8
CALL dst
子程序调用
近调用:返回的偏移地址进栈,
然后转至dst处执行;
远调用:返回的段和偏移地址进栈,
然后转至dst处执行
CALL label (near)
1
CALL reg (near)
2
CALL mem (near)
2
CALL label (far)
4
CALL mem (far)
5
CBW
AL符号扩展成AX
CBW
3
CDQ
EAX符号扩展成EDX:EAX
CDQ
2
CLC
CF清0
CLC
2
- - - - - 0
CLD
DF清0
CLD
2
CLI
IF清0,即关中断
CLI
7
CLTS
清除CR0中任务切换标志 (386+)
CLTS
10
CMC
CF取反,即CFCF
CMC
2
- - - - - C
CMOVcc reg, src
条件成立srcreg, 16/32位 (586+)
cc: 参见Jcc指令。
CMOVcc reg, reg
4~9
CMOVcc reg, mem
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
CMP dst, src
比较:dst-src,据此设置标志位
CMP reg, reg
1
O S Z A P C
CMP reg, mem
2
CMP reg, imm
1
CMP acc, imm
1
CMP mem, reg
2
CMP mem, imm
2
CMPSx
串比较:[(E)SI]-ES:[(E)DI],
然后(E)SI, (E)DI增或减Δ(1/2/4)
x: B, W, D对应字节(1)、字(2)、双字(4)。DF=0增,否则减
CMPSB
5
O S Z A P C
CMPSW
CMPSD
CMPXCHG dst, reg
acc-dst, 等regdst,否则
dstacc (486+)
CMPXCHG reg/mem,reg
5,6
O S Z A P C
CMPXCHG8B dst
EDX:EAX-dst,等ECX:EBXdst,否则EDX:EAXdst (486+)
CMPXCHG8B mem64
10
- - Z - - -
CPUID
CPU标识EAX,EBX,ECX,EDX
CPUID
14
CWD
AX符号扩展成DX:AX
CWD
2
CWDE
AX符号扩展成EAX
CWDE
3
DAA
加法后的十进制调整AL
DAA
3
? S Z A P C
DAS
减法后的十进制调整AL
DAS
3
? S Z A P C
DEC opr
opr自减1,即opr-1opr
DEC reg
1
O S Z A P -
DEC mem
3
DIV src
无符号除法
8位:AXsrc,商AL, 余数AH
16位:DX:AXsrc,商AX, 余数DX
32位:EDX:EAXsrc,商EAX,余数EDX
DIV reg
17~41
? ? ? ? ? ?
DIV mem
ENTER m, n
建m字节局部空间,n级的栈帧 (286+)
ENTER imm16, imm8
11+
HLT
暂停CPU,直到I/O中断发生
HLT
IDIV src
有符号除
8位:AXsrc,商AL, 余数AH
16位:DX:AXsrc,商AX, 余数DX
32位:EDX:EAXsrc,商EAX,余数EDX
IDIV reg
22~46
? ? ? ? ? ?
IDIV mem
IMUL src
有符号乘法
8位:ALsrcAX
16位:AXsrcDX:AX
32位:EAXsrcEDX:EAX
IMUL reg
10~11
O ? ? ? ? C
IMUL mem
IMUL reg, src
有符号乘法 regsrcreg (286+)
IMUL reg, reg/mem
10
O ? ? ? ? C
IMUL reg, src,imm
有符号乘法 srcimmreg (286+)
IMUL reg, reg/mem,imm
10
O ? ? ? ? C
IN acc, src
端口数据acc
IN acc, imm8
7
IN acc, DX
7
INC opr
opr自加1,即opr+1opr
INC reg
1
O S Z A P -
INC mem
3
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
INSx
端口DX数据ES:[(E)DI],
然后(E)DI增或减Δ(1/2/4)
x: B,W, D对应字节(1)、字(2)、双字(4);若DF=0增,否则减
INSB
9
INSW
INSD
INT n
FLAGS进栈,IF,TF置0,从[4n]双字单元取
段和偏移地址,并转去执行 (实地址模式)
INT 3
INT+5
INT imm8
INT+6
INTO
若OF=1,则执行INT 4
INTO
4,INT+5
INVD
使Cache无效
INVD
15
INVLPG
使TLB入口无效
INVLPG
29
IRET
中断返回:从堆栈弹出返回的偏移
和段地址,再弹出标志寄存器内容
IRET
7
Jcc opr
条件满足,则转移至opr
Jcc label
1
JA/JNBE opr
高于(CF=0ZF=0)
JA/JNBE label
JAE/JNB/JNC opr
高于等于(CF=0)
JAE/JNB/JNC label
JB/JC/JNAE opr
低于(CF=1)
JB/JC/JNAE label
JBE/JNA opr
低于等于(CF=1ZF=1)
JBE/JNA label
JE/JZ opr
等于(ZF=1)
JE/JZ label
JG/JNLE opr
大于(ZF=0SF=OF)
JG/JNLE label
JGE/JNL opr
大于等于(SF=OF)
JGE/JNL label
JL/JNGE opr
小于(SF≠OF)
JL/JNGE label
JLE/JNG opr
小于等于(ZF=1SF≠OF)
JLE/JNG label
JNE/JNZ opr
不等于(ZF=0)
JNE/JNZ label
JNO opr
无溢出(OF=0)
JNO label
JNS opr
非负数(SF=0)
JNS label
JO opr
溢出(OF=1)
JO label
JP/JPE opr
有偶数个1(PF=1)
JP/JPE label
JPO/JNP opr
有奇数个1(PF=0)
JPO/JNP label
JS opr
负数(SF=1)
JS label
JCXZ opr
若CX=0,则转移至opr
JCXZ label
6/5
JECXZ opr
若ECX=0,则转移至opr
JECXZ label
6/5
JMP opr
转移至opr
近:转移后仅可改变(E)IP
远:转移后可改变(E)IP和CS
JMP label (near)
1
JMP reg (near)
2
JMP mem (near)
2
JMP label (far)
3
JMP mem (far)
4
LAHF
标志寄存器低字节AH
LAHF
2
- - - - - -
LAR reg, dst
将dst指定的选择器访问权reg
LAR reg, reg/mem
8
- - Z - - -
LDS reg, mem
将mem内容DS : reg
LDS reg, mem
4
LEA reg, mem
将mem的偏移地址reg
LEA reg, mem
1
LEAVE
释放栈帧,即:(E)BP(E)SP,POP (E)BP
LEAVE
3
LES reg, mem
将mem内容ES : reg
LES reg, mem
4
LFS reg, mem
将mem内容FS : reg (386+)
LFS reg, mem
4
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
LGDT mem
将mem内容GDTR (286+)
LGDT mem
6
LGS reg, mem
将mem内容GS : reg (386+)
LGS reg, mem
4
LIDT mem
将mem内容IDTR (286+)
LIDT mem
6
LLDT src
srcLDTR (286+)
LLDT reg/mem
8
LMSW src
src机器状态字(CR0低16位) (286+)
LMSW reg/mem
8
LOCK
总线锁 (以便其他处理器处理指令)
LOCK
1
LODSx
从串取:[(E)SI]acc,
然后(E)SI增或减Δ(1/2/4)
x: B, W, D对应字节(1)、字(2)、双字(4);若DF=0增,否则减
LODSB
2
LODSW
LODSD
LOOP opr
(E)CX自减1, 若(E)CX≠0则转移
LOOP label
5/6
LOOPE/LOOPZ opr
(E)CX自减1, 若ZF=1(E)CX≠0则转移
LOOPE/LOOPZ label
7/8
LOOPNE/LOOPNZ opr
(E)CX自减1, 若ZF=0(E)CX≠0则转移
LOOPNE/LOOPNZ label
7/8
LSL reg, src
src选择器确定的段界reg (286+)
LSL reg, reg/mem
8
- - Z - - -
LSS reg, mem
将mem内容SS : reg (386+)
LSS reg, mem
4
LTR src
src任务寄存器TR (286+)
LTR reg16/mem16
10
MOV dst, src
数据传送:srcdst
MOV reg, reg
1
MOV reg, mem
1
MOV reg, imm
1
MOV mem, reg
1
MOV mem, imm
1
MOV acc, mem
1
MOV mem, acc
1
MOV dst, src
控制寄存器内容传送 (386+)
CRireg32, reg32CRi (i=0,2,3,4)
MOV reg32, CRi
4
MOV CRi, reg32
12~22
MOV dst, src
调试寄存器内容传送 (386+)
DRireg32, reg32DRi (i=0~7)
MOV reg32, DRi
2~12
MOV DRi, reg32
11~12
MOV dst, src
段寄存器内容传送
segdst, srcseg(CS除外)
MOV reg/mem, seg
1
MOV seg, reg/mem
2~12
MOVSx
串传送: [(E)SI]ES:[(E)DI], 然
后(E)SI、(E)DI增或减Δ(1/2/4)
x: B, W, D对应字节(1)、字(2)、双字(4);若DF=0增,否则减
MOVSB
4
MOVSW
MOVSD
MOVSX reg, src
src经符号扩展后reg (386+)
MOVSX reg, reg/mem
3
MOVZX reg, src
src经0扩展后reg (386+)
MOVZX reg, reg/mem
3
MUL src
无符号乘法
8位:ALsrcAX
16位:AXsrcDX:AX
32位:EAXsrcEDX:EAX
MUL reg
10~11
O ? ? ? ? C
MUL mem
NEG opr
opr求补(负),即-opropr
NEG reg
1
O S Z A P C
NEG mem
3
NOP
空操作
NOP
1
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
NOT opr
opr按位取反,即:opropr
NOT reg
1
O S Z A P C
NOT mem
3
OR dst, src
逻辑或,dstsrcdst
OR reg, reg
1
0 S Z ? P 0
OR reg, mem
2
OR reg, imm
1
OR mem, reg
3
OR mem, imm
3
OR acc, imm
1
OUT dst, acc
acc内容端口dst
OUT imm8, acc
12
OUT DX, acc
12
OUTSx
[(E)SI]内容DX端口, (386+)
然后(E)SI增或减Δ(1/2/4)
x: B, W, D对应字节(1)、字(2)、双字(4);若DF=0增,否则减
OUTSB
13
OUTSW
OUTSD
POP dst
从堆栈弹出数据dst
((E)SP增2或4, seg不能为CS)
POP reg
1
POP mem
3
POP seg
3~12
POPA
数据出栈DI, SI, BP, BX, DX, CX, AX
(SP增28) (286+)
POPA
5
POPAD
堆栈弹出数据EDI,ESI,EBP,EBX,EDX,
ECX,EAX ((E)SP增48) (386+)
POPAD
5
POPF
数据出栈FLAGS ((E)SP增2) (286+)
POPF
4
O S Z A P C
POPFD
数据出栈EFLAGS ((E)SP增4) (386+)
POPFD
4
O S Z A P C
PUSH src
src数据进栈 ((E)SP减2/4)
(reg32,mem32,imm, 386+)
PUSH reg
1
PUSH mem
2
PUSH imm
1
PUSH seg
1
PUSHA
AX,CX,DX,BX,SP,BP,SI,DI进栈,
(SP减28) (286+)
PUSHA
5
PUSHAD
EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI进栈, ((E)SP减48) (386+)
PUSHAD
5
PUSHF
FLAGS进栈 ((E)SP减2) (286+)
PUSHF
3
PUSHFD
EFLAGS进栈 ((E)SP减4) (386+)
PUSHFD
3
RCL dst, n
dst带进位循环左移n位
dst
CF
注: n为imm8是386+支持
RCL reg, 1
1
O - - - - C
RCL mem, 1
3
RCL reg, CL
7~24
RCL mem, CL
9~26
RCL reg, imm8
8~25
RCL mem, imm8
10~27
RCR dst, n
dst带进位循环右移n位
dst
CF
注: n为imm8是386+支持
RCR reg, 1
1
O - - - - C
RCR mem, 1
3
RCR reg, CL
7~24
RCR mem, CL
9~26
RCR reg, imm8
8~25
RCR mem, imm8
10~27
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
RDMSR
MSR[ECX]EDX:EAX (586+)
RDMSR
20~24
RDTSC
自启动以来CPU执行的时钟周期数EDX:EAX (586+)
28
REP 串指令
当(E)CX≠0重复{(E)CX自减1,
再执行其后的串指令}
REP INSx
11+3n
REP LODSx
7+3n
REP MOVSx
6,13n
REP OUTSx
13+4n
REP STOSx
6,9+3n
REPE/REPZ串指令
当(E)CX≠0ZF=1重复{(E)CX自
减1,再执行其后的串指令}
REPE/REPZ CMPSx
7,8+4n
O S Z A P C
REPE/REPZ SCASx
7,8+4n
REPNE/REPNZ串指令
当(E)CX≠0ZF=0重复{(E)CX自
减1,再执行其后的串指令}
REPNE/REPNZ CMPSx
7,8+4n
O S Z A P C
REPNE/REPNZ SCASx
7,8+4n
RET [n]
子程序返回:从堆栈弹出返回地
址,若有n则返回后(E)SP再增n。
近返回RETN:只弹出偏移地址;
远返回RETF:弹出偏移和段地址;
RETN
2
RETF
4
RETN imm16
3
RETF imm16
4
ROL dst, n
dst循环左移n位
dst
CF
注:n为imm8是386+支持
ROL reg, 1
1
O - - - - C
ROL mem, 1
3
ROL reg, CL
4
ROL mem, CL
4
ROL reg, imm8
1
ROL mem, imm8
3
ROR dst, n
dst循环右移n位
dst
CF
注:n为imm8是386+支持
ROR reg, 1
1
O - - - - C
ROR mem, 1
3
ROR reg, CL
4
ROR mem, CL
4
ROR reg, imm8
1
ROR mem, imm8
3
RSM
从系统管理方式恢复
RSM
O S Z A P C
SAHF
AH标志寄存器的低8位
SAHF
1
- S Z A P C
SAL dst, n
dst算术左移n位,即dst2ndst
dst
CF
0
注:n为imm8时,386+支持
SAL reg, 1
1
O - - - - C
SAL mem, 1
3
SAL reg, CL
4
SAL mem, CL
4
SAL reg, imm8
1
SAL mem, imm8
3
SAR dst, n
dst算术右移n位,即dst2ndst
dst
CF
注:n为imm8是386+支持
SAR reg, 1
1
O - - - - C
SAR mem, 1
3
SAR reg, CL
4
SAR mem, CL
4
SAR reg, imm8
1
SAR mem, imm8
3
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
SBB dst, src
带借位减法:dst-src-CFdst
SBB reg, reg
1
O S Z A P C
SBB reg, mem
2
SBB reg, imm
1
SBB acc, imm
1
SBB mem, reg
3
SBB mem, imm
3
SCASx
串扫描:acc-ES:[(E)DI],
然后(E)DI增或减Δ(1/2/4)
x: B, W, D对应字节(1)、字(2)、双字(4);若DF=0增,否则减
SCASB
4
O S Z A P C
SCASW
SCASD
SETcc dst
条件真,1dst,否则0dst, cc见Jcc (386+)
SETcc reg8/mem8
3~8
SGDT mem
GDTRmem (286+)
SGDT mem
4
SHL dst, n
dst逻辑左移n位,与SAL相同
SHL/SAL是一条指令
SHLD dst, reg, n
双精度左移 (操作数:16/32位)(386+)
dst
CF
reg
SHLD reg/mem, reg, imm8
4
? S Z ? P C
SHLD reg/mem, reg, CL
SHR dst, n
dst逻辑右移n位
dst
CF
0
注:n为imm8时,386+支持
SAR reg, 1
1
O - - - - C
SAR mem, 1
3
SAR reg, CL
4
SAR mem, CL
4
SAR reg, imm8
1
SAR mem, imm8
3
SHRD dst, reg, n
双精度右移 (操作数:16/32位)(386+)
SHLD reg/mem, reg, imm8
4
? S Z ? P C
dst
CF
reg
SHLD reg/mem, reg, CL
SIDT mem
IDTRmem
SIDT mem
4
SLDT dst
LDTRdst
SLDT reg/mem
2
SMSW dst
机器状态字(CR0低16位)dst (286+)
SMSW reg/mem
4
STC
CF置1
STC
2
- - - - - 1
STD
DF置1
STD
2
STI
IF置1,即开中断
STI
7
STOSx
串存入:accES:[(E)DI],
然后(E)DI增或减Δ(1/2/4)
x: B, W, D对应字节(1)、字(2)、双字(4);若DF=0增,否则减
STOSB
3
STOSW
STOSD
STR dst
任务寄存器TRdst
STR reg/mem16
2
SUB dst, src
减法:dst-srcdst
SUB reg, reg
1
O S Z A P C
SUB reg, mem
2
SUB reg, imm
1
SUB acc, imm
1
SUB mem, reg
3
SUB mem, imm
3
续表
指 令
功 能
指 令 形 式
周期数
影响标志位
TEST dst, src
与测试,dstsrc据此设置标志位
TEST reg, reg
2
0 S Z ? P 0
TEST reg, mem
1
TEST reg, imm
1
TEST acc, imm
1
TEST mem, imm
2
VERR src
若src确定的段可读,1ZF,否则0ZF
VERR reg/mem16
7
- - Z - - -
VERW src
若src确定的段可写,1ZF,否则0ZF
VERW reg/mem16
7
- - Z - - -
WAIT
等待,检查挂起未屏蔽的浮点异常
WAIT
1
WBINVD
写回Cache,并使之无效 (486+)
WBINVD
2000+
WRMSR
EDX:EAXMSR[ECX] (586+)
WRMSR
30~35
XADD dst, src
dstsrc,再dst+srcdst (486+)
XADD reg/mem, reg
3,4
O S Z A P C
XCHG dst, src
dst, src内容交换,即dstsrc
XCHG reg/mem, reg
3
XCHG acc, reg
2
XLAT/XLATB
查表换码:(E)BX+AL确定的单元值AL
XLAT
4
XOR dst, src
逻辑异或,dstsrcdst
XOR reg, reg
1
0 S Z ? P 0
XOR reg, mem
2
XOR reg, imm
1
XOR acc, imm
1
XOR mem, reg
3
XOR mem, imm
3
附录B 编程练习环境说明
1. 编程练习软件包
附带软件包x86ASM是在Microsoft的MASM6.15软件包的基础上,加入CodeView、Win32的开发工具及Turbo C 2.0等,进行简单整理而成的,以便初学者编程练习使用。
软件包中的基本文件有:
MASM.EXE 汇编程序
LINK.EXE 连接程序
ML.EXE 汇编连接程序(自动调用LINK.EXE)
ML.ERR 汇编错误信息文件
LIB.EXE 子程序库管理程序
LIB16.EXE 16位子程序管理程序
LINK16.EXE 生成DOS程序的连接程序
LIB32.EXE Win32的库管理程序
LINK32.EXE 生成Win32程序的连接程序
CV目录 CodeView调试程序CV.EXE及相应的环境
INC32目录 Win32的API的函数库声明文件
LIB32目录 Win32的API的函数库
TC目录 Turbo C 2.0命令行环境和集成环境
SET2ML16.BAT ML默认使用LINK16.EXE连接程序
SET2ML32.BAT ML默认使用LINK32.EXE连接程序
使用这个软件包既可以用来练习编写DOS环境下的应用程序,也可以用来练习编写Win32环境下的应用程序。
提供TC的目的是用它来练习16位环境下汇编语言程序模块和C程序模块的连接。
2.DOS系统下的编程练习环境
真正的DOS是运行在实模式下的一个操作系统,所以DOS程序是运行在16位地址模式下的。这种模式下的程序具有这样的特点:
(1) 偏移地址是16位,所表示的偏移地址只能是0~64K-1。在默认情况下,指令处理的数据类型是16位的,但也可以处理32位数据。
(2) 应用程序可以访问所有的计算机系统资源,可以使用I/O指令直接与外设交换数据,也可以用INT指令调用DOS环境下的系统功能(DOS和BIOS)。
在DOS系统下有很多系统功能调用可用,但是这里仅将DOS环境作为编程练习的平台,所以只须如下所述的很少几个系统功能就足够了,主要解决字符的输入、输出,以及应用程序退出返回。如果读者需要开发DOS系统下的应用程序,则必须另外参阅相关的系统资料手册。
1) 编程练习所用的DOS系统调用
(1) 功能01h。从标准输入设备输入一个字符,并回显。
入口:AH=01h
出口:AL=输入字符的ASCII码
(2) 功能02h。向标准输出设备输出一个字符。
入口:AH=02h
DL=待输出字符的ASCII码
出口:无
(3) 功能08h。从标准输入设备输入一个字符,无回显。
入口:AH=08h
出口:AL=输入字符的ASCII码
(4) 功能09h。输出一个字符串到标准输出设备上。
入口:AH=09h
DS:DX=待输出字符串的地址(字符串须以$作为其结束标志)
出口:无
(5) 功能0Ah。从标准输入设备上读入字符串(以回车结束,有回显)。
入口:AH=0Ah
DS:DX=输入缓冲区地址(字节0须填入允许输入字符数)。
出口:输入缓冲区字节1存放输入的字符数,字节2起存放输入的字符串
(6) 功能0Bh。检查标准输入设备上是否有字符可读。
入口:AH=0Bh
出口:AL=00h——无字符可读;FFh——有字符可读
(7) 功能4Ch。终止程序的执行,并可返回一个代码。
入口:AH=4Ch
AL=返回的代码
出口:无
2) 示例程序Demo16.ASM
编写程序Demo16.ASM,输入一个字符和一个字符串,并显示。
_STACK SEGMENT STACK STACK USE16 ; 定义堆栈段
DB 2046 DUP(0) ; 堆栈区长度:2KB
TOS DW 0 ; 初始堆栈栈顶
_STACK ENDS ; 堆栈段定义结束
_DATA SEGMENT DATA USE16 ; 定义数据段
Msg DB 13, 10, Hello, World!, 13,10,$
C1 DB 13, 10, Character is: *, 13, 10, $
S2 DB 13, 10, Buffer content is:
Buffer DB 9, 0, 10 DUP(*), 13, 10, $
_DATA ENDS ; 数据段定义结束
_TEXT SEGMENT CODE USE16 ; 定义代码段
ASSUME CS: _TEXT, DS:_DATA, SS:_STACK
Start: MOV AX, _DATA ; 取数据内存区段地址
MOV DS, AX ; 设置数据段寄存器
CLI ; 设置堆栈期
展开阅读全文