汇编输出指令(汇编语言指令)

您所在的位置:网站首页 rd回归时协变量换位置后结果变了 汇编输出指令(汇编语言指令)

汇编输出指令(汇编语言指令)

2023-04-24 23:22| 来源: 网络整理| 查看: 265

本文目录汇编语言指令求汇编指令大全~汇编指令(out)语法汇编语言中 OUT DX,AL 指令操作过程是什么 OUT操作码实现的功能是什么主要的汇编指令有哪些汇编语言指令有哪些汇编指令LSL输入指令IN输出指令OUT汇编两个十进制数相加以二进制循环输出怎么编写,汇编刚入门,看不懂复杂的指令,麻烦简单点,谢谢汇编语言中把数据打印到屏幕上的指令是什么啊急求答案汇编语言指令

8086汇编指令手册一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 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 为查表结果. ( -》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. NEC 求反(以 0 减之). CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整. DAS 减法的十进制调整. MUL 无符号乘法. IMUL 整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整. DIV 无符号除法. IDIV 整数除法. 以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或 商回送AX,余数回送DX, (字运算). AAD 除法的ASCII码调整. CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) 三、逻辑运算指令 ——————————————————————————————————————— AND 与运算. OR 或运算. 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 程序结束.

求汇编指令大全~

8086/8088指令系统一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV 指令格式为: MOV DST,SRC执行的操作:(DST)《-(SRC).PUSH 进栈指令格式为:PUSH SRC执行的操作:(SP)《-(SP)-2((SP)+1,(SP))《-(SRC).POP 出栈指令格式为:POP DST执行的操作:(DST)《-((SP+1),(SP))(SP)《-(SP)+2.XCHG 交换指令格式为:XCHG OPR1,OPR2执行的操作:(OPR1)《--》(OPR2)2.累加器专用传送指令IN(Input) 输入OUT(Output) 输出XLAT(Translate) 换码这组指令只限于使用累加器AX 或AL 传送信息..IN 输入指令长格式为: IN AL,PORT(字节)IN AX,PORT(字)执行的操作: (AL)《-(PORT)(字节)(AX)《-(PORT+1,PORT)(字)短格式为: IN AL,DX(字节)IN AX,DX(字)执行的操作: AL《-((DX))(字节)AX《-((DX)+1,DX)(字).OUT 输出指令长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)《-(AL)(字节)(PORT+1,PORT)《-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))《-(AL)(字节)((DX)+1,(DX))《-AX(字)在IBM-PC 机里,外部设备最多可有65536个I/O 端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号》=256时,只能使用短格式,此时,必须先把端口号放到DX 寄存器中(端口号可以从0000到0FFFFH),然后再用IN 或OUT 指令来传送信息..XLAT 换码指令格式为: XLAT OPR或: XLAT执行的操作:(AL)《-((BX)+(AL))3.有效地址送寄存器指令LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DSLES(Load ES with Pointer)指针送寄存器和ES.LEA 有效地址送寄存器格式为: LEA REG,SRC执行的操作:(REG)《-SRC指令把源操作数的有效地址送到指定的寄存器中..LDS 指针送寄存器和DS 指令格式为: LDS REG,SRC执行的操作:(REG)《-(SRC)(DS)《-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS 寄存器中.该指令常指定SI 寄存器..LES 指针送寄存器和ES 指令格式为: LES REG,SRC执行的操作: (REG)《-(SRC)(ES)《-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES 寄存器中.该指令常指定DI 寄存器.4.标志寄存器传送指令LAHF(Load AH with flags)标志送AHSAHF(store AH into flags)AH 送标志寄存器PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈.LAHF 标志送AH格式为: LAHF执行的操作:(AH)《-(PWS 的低字节).SAHF AH 送标志寄存器格式为: SAHF执行的操作:(PWS 的低字节)《-(AH).PUSHF 标志进栈格式为: PUSHF执行的操作:(SP)《-(SP)-2((SP)+1,(SP))《-(PSW).POPF 标志出栈格式为: POPF执行的操作:(PWS)《-((SP)+1,(SP))(SP)《-(SP+2)二、算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加1.ADD 加法指令格式: ADD DST,SRC执行的操作:(DST)《-(SRC)+(DST).ADC 带进位加法指令格式: ADC DST,SRC执行的操作:(DST)《-(SRC)+(DST)+CF.ADD 加1指令格式: INC OPR执行的操作:(OPR)《-(OPR)+12.减法指令SUB(subtract)减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较.SUB 减法指令格式: SUB DST,SRC执行的操作:(DST)《-(DST)-(SRC).SBB 带借位减法指令格式: SBB DST,SRC执行的操作:(DST)《-(DST)-(SRC)-CF.DEC 减1指令格式: DEC OPR执行的操作:(OPR)《-(OPR)-1.NEG 求补指令格式: NEG OPR执行的操作:(OPR)《- -(OPR).CMP 比较指令格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB 指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.3.乘法指令MUL(Unsigned Multiple)无符号数乘法IMUL(Signed Multiple)带符号数乘法.MUL 无符号数乘法指令格式: MUL SRC执行的操作:字节操作数:(AX)《-(AL)*(SRC)字操作数:(DX,AX)《-(AX)*(SRC).IMUL 带符号数乘法指令格式: IMUL SRC执行的操作:与MUL 相同,但必须是带符号数,而MUL 是无符号数.4.除法指令DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法CBW(Convert byte to word)字节转换为字CWD(Contert word to double word)字转换为双字.DIV 无符号数除法指令格式: DIV SRC执行的操作:字节操作:(AL)《-(AX)/(SRC)的商(AH)《-(AX)/(SRC)的余数字操作: (AX)《-(DX,AX)/(SRC)的商(AX)《-(DX,AX)/(SRC)的余数.IDIV 带符号数除法指令格式: DIV SRC执行的操作:与DIV 相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同..CBW 字节转换为字指令格式: CBW执行的操作:AL 的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH.CWD 字转换为双字指令格式: CWD执行的操作:AX 的内容符号扩展到DX.即如(AX) 的最高有效位为0, 则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.三、逻辑指令1.逻辑运算指令AND(and) 逻辑与OR(or) 逻辑或NOT(not) 逻辑非XOR(exclusive or)异或TEST(test) 测试.AND 逻辑与指令格式: AND DST,SRC执行的操作:(DST)《-(DST)^(SRC).OR 逻辑或指令格式: OR DST,SRC执行的操作:(DST)《-(DST)V(SRC).NOT 逻辑非指令格式: NOT OPR执行的操作:(OPR)《-(OPR).XOR 异或指令格式: XOR DST,SRC执行的操作:(DST)《-(DST)V(SRC).TEST 测试指令格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码2.移位指令SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移格式: SHL OPR,CNT(其余的类似)其中OPR 可以是除立即数以外的任何寻址方式.移位次数由CNT 决定,CNT 可以是1或CL.循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL 用来乘2,SAR 用来除以2;而逻辑移位指令则用来无符号数运算,SHL 用来乘2,SHR 用来除以2.四、串处理指令1.与REP 相配合工作的MOVS,STOS 和LODS 指令.REP 重复串操作直到(CX)=0为上格式: REP string primitive其中String Primitive 可为MOVS,LODS 或STOS 指令执行的操作:1)如(CX)=0则退出REP,否则往下执行.2)(CX)《-(CX)-13)执行其中的串操作4)重复1)~3).MOVS 串传送指令格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR执行的操作:1)((DI))《-((SI))2)字节操作:(SI)《-(SI)+(或-)1,(DI)《-(DI)+(或-)1当方向标志DF=0时用+,当方向标志DF=1时用-3)字操作:(SI)《-(SI)+(或-)2,(DI)《-(DI)+(或-)2当方向标志DF=0时用+,当方向标志DF=1时用-该指令不影响条件码..CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量..STOS 存入串指令格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))《-(AL),(DI)《-(DI)+-1字操作: ((DI))《-(AX),(DI)《-(DI)+-2该指令把AL 或AX 的内容存入由(DI)指定的附加段的某单元中,并根据DF 的值及数据类型修改DI 的内容,当它与REP 联用时,可把AL 或AX 的内容存入一个长度为(CX)的缓冲区中..LODS 从串取指令格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)《-((SI)),(SI)《-(SI)+-1字操作: (AX)《-((SI)),(SI)《-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL 或AX 中,并根据方向标志及数据类型修改SI 的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP 联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.2.与REPE/REPZ 和REPNZ/REPNE 联合工作的CMPS 和SCAS 指令.REPE/REPZ 当相等/为零时重复串操作格式: REPE(或REPZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令.执行的操作:1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)《-(CX)-13)执行其后的串指令4)重复1)~3).REPNE/REPNZ 当不相等/不为零时重复串操作格式: REPNE(或REPNZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令执行的操作:除退出条件(CX=0)或ZF=1外,其他操作与REPE 完全相同..CMPS 串比较指令格式: CMP SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)《-(SI)+-1,(DI)《-(DI)+-1字操作: (SI)《-(SI)+-2,(DI)《-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS 指令的规定相同..SCAS 串扫描指令格式: SCAS DSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)《-(DI)+-1字操作: (AL)-((DI)),(DI)《-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS 的规定相同.五、控制转移指令1.无条件转移指令.JMP(jmp) 跳转指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)《-(IP)+8位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)《-(IP)+16位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)《-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)《-OPR 的段内偏移地址(CS)《-OPR 所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)《-(EA)(CS)《-(EA+2)2.条件转移指令1)根据单个条件标志的设置情况转移.JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0.JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1.JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0.JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1.JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移格式: JP OPR测试条件:PF=1.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移格式: JNP(或JPO) OPR测试条件:PF=0.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移.JB(或JNAE,JC)格式:同上.JNB(或JAE,JNC)格式:同上.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SFVOF)VZF=1.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX 的值为0则转移指令.JCXZ(Jump if CX register is zero) CX 寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8位短跳!3.循环指令.LOOP 循环指令格式: LOOP OPR测试条件:(CX)《》0.LOOPZ/LOOPE 当为零或相等时循环指令格式: LOOPZ(或LOOPE) OPR测试条件:(CX)《》0且ZF=1.LOOPNZ/LOOPNE 当不为零或不相等时循环指令格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)《》0且ZF=0这三条指令的步骤是:1)(CX)《-(CX)-12)检查是否满足测试条件,如满足则(IP)《-(IP)+D8的符号扩充.4.子程序.CALL 调用指令.RET 返回指令5.中断.INT 指令格式: INT TYPE或INT执行的操作:(SP)《-(SP)-2((SP)+1,(SP))《-(PSW)(SP)《-(SP)-2((SP)+1,(SP))《-(CS)(SP)《-(SP)-2((SP)+1,(SP))《-(IP)(IP)《-(TYPE*4)(CS)《-(TYPE*4+2).INTO 若溢出则中断执行的操作:若OF=1则:(SP)《-(SP)-2((SP)+1,(SP))《-(PSW)(SP)《-(SP)-2((SP)+1,(SP))《-(CS)(SP)《-(SP)-2((SP)+1,(SP))《-(IP)(IP)《-(10H)(CS)《-(12H).IRET 从中断返回指令格式: IRET执行的操作:(IP)《-((SP)+1,(SP))(SP)《-(SP)+2(CS)《-((SP)+1,(SP))(SP)《-(SP)+2(PSW)《-((SP)+1,(SP))(SP)《-(SP)+2六、处理机控制指令1.标志处理指令.CLC 进位位置0指令(Clear carry)CF《-0.CMC 进位位求反指令(Complement carry)CF《-CF.STC 进位位置1指令(Set carry)CF《-1.CLD 方向标志置0指令(Clear direction)DF《-0.STD 方向标志置1指令(Set direction)DF《-1.CLI 中断标志置0指令(Clear interrupt)IF《-0.STI 中断标志置1指令(Set interrupt)IF《-02.其他处理机控制指令NOP(No Opreation) 无操作HLT(Halt) 停机WAIT(Wait) 等待ESC(Escape) 换码LOCK(Lock) 封锁这些指令可以控制处理机状态.这们都不影响条件码..NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代..HLT 停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序..WAIT 等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT 指令继续德行..ESC 换码指令格式ESC mem其中mem 指出一个存储单元,ESC 指令把该存储单元的内容送到数据总线去.当然ESC 指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件..LOCK 封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU 与其他处理机协同工作时,该指令可避免破坏有用信息.

汇编指令(out)语法

四个都错误语法是out port,acc1、要是交换下操作数,倒是正确的。或者改为in指令。2、bx错误,port端口号超过255时,应该放到dx中。3、还是交换下操作数就对了,或者改为in指令。4、ah错误,如果输出的数据是8位,则应该使用al寄存器。总结:语法格式:out port,acc1)port为端口地址。可以是0-0ffffh小于255时,可用直接寻址或间接寻址;大于255,如果端口号在0-255(0ffh)之间,可用直接寻址或间接寻址,用于间接寻址的寄存器是DX。比如直接寻址:out 30h,al间接寻址:mov dx,30h out dx,al如果超过255(0ffh)必须用间接寻址。比如:mov dx,378hmov dx,al2)acc必须是累加器。外设是8位端口时,用AL寄存器;外设为16为端口时,用AX寄存器。 比如:out dx,al ;将al中的字节数据通过dx所指出的端口向外设输出out dx,ax ;将ax中的字数据通过dx所指出的端口向外设输出

汇编语言中 OUT DX,AL 指令操作过程是什么 OUT操作码实现的功能是什么

in和Out都是IO操作指令 , 例如out指令:OUT PortNo/DX, AL/AX

功能为把AL/AX的数据送到IO地址,IO地址如果大于FFH,则地址需要放入DX,要输出字节,默认使用AL寄存器,要输出字,默认使用AX寄存器。

例如:MOV AL,10H //(将字节10H 从 I/O端口70H 输出)

OUT 70H,ALMOV AX,0010H //(将 字0010H 从I/O端口37FH 输出。)

MOV DX,37FH

OUT DX,AX

扩展资料

编译环境

用汇编语言等非机器语言书写好的符号程序称为源程序,汇编语言编译器的作用是将源程序翻译成目标程序。目标程序是机器语言程序,当它被安置在内存的预定位置上后,就能被计算机的CPU处理和执行。

汇编的调试环境总的来说比较少,也很少有非常好的编译器。编译器的选择依赖于目标处理器的类型和具体的系统平台。一般来说,功能良好的编译器用起来应当非常方便,比如,应当可以自动整理格式、语法高亮显示,集编译、链接和调试为一体,方便实用。

对于广泛使用的个人计算机来说,可以自由选择的汇编语言编译器有MASM、NASM、TASM、GAS、FASM、RADASM等,但大都不具备调试功能。如果是为了学习汇编语言,轻松汇编因为拥有一个完善的集成环境,是一款非常适合初学者的汇编编译器。

参考资料来源:百度百科-汇编语言

主要的汇编指令有哪些

LDR 和STR——用于字和无符号字节\x0d\x0a指令格式:\x0d\x0aLDR/STR{cond}{T} Rd,《地址》\x0d\x0aLDR/STR{cond}B{T} Rd,《地址》 \x0d\x0a\x0d\x0aLDR{cond}{T} Rd,《地址》 加载指定地址的字数据到Rd中;\x0d\x0aSTR{cond}{T} Rd,《地址》 存储Rd中的字数据到指定的地址单元中;\x0d\x0aLDR{cond}B{T} Rd,《地址》 指令加载指定地址的字节数据到Rd的的最低字节中(Rd的高24位清零);\x0d\x0aSTR{cond}B{T} Rd, 《地址》 指令存储Rd中的最低字节数据到指定的地址单元中。\x0d\x0a T为可选后缀,若有T,那么即使处理器是在特权模式下,存储系统也将访问看成处理器是在用户模式下,T 在用户模式下无效,不能与前索引偏移一起使用T。\x0d\x0a\x0d\x0a地址部分可用的形式有4种: \x0d\x0a\x0d\x0a零偏移(zero offset) \x0d\x0abic=““ r3,r3,#0x70\x0d\x0astr=““ r3,r3,#0xb0\x0d\x0astr=““ r3,r3,#0xd0\x0d\x0astr=““ r3,r3,#0xe0\x0d\x0astr=““ r3,r3,#0xf0\x0d\x0aorr=““ rd,rn,operand2=““ rm=““ rm,切换处理器状态\x0d\x0a\x0d\x0a指令的条件码\x0d\x0a条件码=““ sub指令用rn=““ vc=““ vs=““ v清零=““ v置位=““ z清零(z=“0)“ z清零且n等于v=““ z置位(z=“1)“ z置位且c清零=““ z置位或n不等于v=““ 不相等=““ 中。=““ 分支指令\x0d\x0a\x0d\x0a=““ 助记符后缀=““ 含义=““ 带状态切换的分支指令\x0d\x0a\x0d\x0a=““ 带符号数大于=““ 带符号数大于或等于=““ 带符号数小于=““ 带符号数小于或等于=““ 带链接的分支指令\x0d\x0a\x0d\x0a=““ 忽略=““ 指令示例:=““ 操作\x0d\x0a\x0d\x0ab{cond}=““ 整数或0=““ 无条件执行=““ 无符号数大于=““ 无符号数大于等于=““ 无符号数小于=““ 无符号数小于等于=““ 未溢出=““ 标志=““ 溢出=““ 的值减去操作数operand2=““ 相等=““ 说明\x0d\x0a\x0d\x0a=““ 负数=““ ,pc←lable=““ ,并将结果存放到目的寄存器rd=““ ;r1=“R1-R2,并并根据运算的结果更新标志位\x0d\x0aSUBGT“ ;大于则=““>跳到less>

汇编语言指令有哪些

一、数据位传送指令:

1、MOV   C,  bit     ;bit  可直接寻址位 C←(bit)

2、MOV   bit,C     ;C    进位位 (bit) ← C 二、位变量修改指令:

1、CLR    C          ; 将C=0

2、CLR    bit

3、CPL    C           ; 将C求反再存入C

4、CPL    bit          ; 将bit求反再存入bit

5、SETB   C          ; 将C=1

6、SETB   bit          ; (bit) ← 1 三、位变量逻辑指令:

ANL   C,   bit    ANL   C,   bit    ORL   C,   bit   ORL   C,   bit

延展阅读:

汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

通用数据传送指令:

1、MOV 传送字或字节;

2、MOVSX 先符号扩展,再传送;

3、MOVZX 先零扩展,再传送;

4、PUSH 把字压入堆栈;

5、POP 把字弹出堆栈;

6、PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈;

7、POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈;

8、PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈;

9、POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈;

10、BSWAP 交换32位寄存器里字节的顺序;

11、XCHG 交换字或字节( 至少有一个操作数为寄存器,段寄存器不可作为操作数);

12、CMPXCHG 比较并交换操作数( 第二个操作数必须为累加器AL/AX/EAX );

13、XADD 先交换再累加( 结果在第一个操作数里 );

14、XLAT 字节查表转换;

15、BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH);

16、返回 AL 为查表结果。( -》AL )

汇编指令LSL

R0的值是:0x39

这语句功能是,R1+8*R2.结果送到R08*R2=0x10

R2, LSL #3就是R2左移3位,相当于乘以8

所以结果是0x39

拓展资料

汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

常用汇编指令汇总:

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 为查表结果. ( -》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位标志出栈.

输入指令IN输出指令OUT

输入指令IN输出指令OUT都是累加器专用指令。

用法:

IN AX/AL,I/O端口地址;表示从外部设备输入数据给累加器,如果从外设端口中输入一个字节则给8位累加器AL,若输入一个字则给16位累加器AX。如 IN AL,80H

OUT I/O端口地址,AX/AL;表示将累加器的数据输出给外部设备,如果向外设端口输出一个字节则用8位累加器AL,若输出一个字则用16位累加器AX。

扩展资料:

汇编语言指令

MOVSX先符号扩展,再传送

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依次弹出堆栈

参考资料来源:百度百科-汇编语言 (面向机器的程序设计语言)

汇编两个十进制数相加以二进制循环输出怎么编写,汇编刚入门,看不懂复杂的指令,麻烦简单点,谢谢

cseg segmentassume cs:csegstart:  mov ax, 20 ; 计算  add ax, 40 ; 20+40  mov bx, ax ;保存计算结果到bx中,供下面打印2进制使用  mov cx,16  ;2进制,16位寄存器,共16个bit,需要循环16次  mov ah,0eh ;使用int 10h的输出功能p1:  rol bx,1   ;把bx最高1位,移到最低1位,供输出用  mov al,bl  ;把bl拷贝到al,供输出用  and al,1   ;只保留最低1位的值,即刚才bx中最高位的值  xor al,30h ;转换为ascII值’0’,或’1’  int 10h    ;调用10h中断,输出到屏幕上  loop p1    ;循环    mov ah,4ch ;程序执行完毕,退出到系统  int 21hcseg endsend start

汇编语言中把数据打印到屏幕上的指令是什么啊急求答案

汇编语言能把数据打印到屏幕上的指令有以下几个:1 mov ah,01h;键盘输入一个字符保存在al里,比如说“2”,那么它将会以“32”的形式被保存 ;在al里面,其中“32”是十六进制的 int 21h ;这样就完成了一个dos的01号功能调用2 mov ah,02h;这是现实dl里面的字符的,如:mov dl,32h,再调用此功能,则屏幕会显示 ;“2” int 21h;完成了2号功能的调用3 mov ah,06h;这也是能在屏幕显示输入数据的,不过用的是外部设备,如芯片244(这不 ;是全名) int 21h4 mov ah,09h;显示字符串,就是你写数据段的汇编程序时,输入的字符串会在运行程序时 ;在屏幕显示 int 21h



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3