×

汇编语言输入输出指令

汇编语言输入输出指令(汇编语言中输入输出指令中dx为什么是8位而不是16位)

admin admin 发表于2024-09-25 23:32:29 浏览5 评论0

抢沙发发表评论

大家好,汇编语言输入输出指令相信很多的网友都不是很明白,包括汇编语言中输入输出指令中dx为什么是8位而不是16位也是一样,不过没有关系,接下来就来为大家分享关于汇编语言输入输出指令和汇编语言中输入输出指令中dx为什么是8位而不是16位的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

汇编语言中输入输出指令中dx为什么是8位而不是16位

汇编语言中输入输出指令中dx是16位,如mov dx,ffffh,则dx=ffffh,化成二进制为1111 1111 1111 1111B,是16位。8位的是DH、DL。

用汇编语言编写A+B=C,并且要求有输入输出

; 本程序限定A、B最多4位十进制数; 本程序通过编译,运行正确Code Segment Assume CS:Code,DS:CodeCR equ 000DHLF equ 000AHKBBack equ 0008H; -----------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM; -----------------------------------------; 功能:取光标位置; 入口:无; 出口:DH=行号,DL=列号GetCursor Proc Near PUSH AX PUSH BX PUSH CX XOR BX,BX MOV AH,3 INT 10H MOV Cursor_Row,DH MOV Cursor_Col,DL POP CX POP BX POP AX RETCursor_Row DB ?Cursor_Col DB ?GetCursor EndP; -----------------------------------------; 功能:置光标位置; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)SetCursor Proc Near PUSH CX PUSH BX PUSH AX MOV DH,Cursor_Row MOV DL,Cursor_Col XOR BX,BX MOV AH,2 INT 10H POP AX POP BX POP CX RETSetCursor EndP; -----------------------------------------; 功能:输出回车换行enter_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax retenter_CTLF endp ; -----------------------------------------; 功能:输出一个字符 ; 入口:dl=要显示的字符 enter_Chr proc Near push ax mov ah,02h int 21h pop ax ret enter_Chr endp ; -----------------------------------------; 功能:键盘输入一个N位的十进制数字,; 用逻辑和移位指令将其转换成二进制数并保存在指定的内存单元。; 入口:N=数字位数;di=保存输入的数字首地址; 出口:转换后的二进制数保存在di所指的单元Input_Digit Proc Near push dx push cx push bx push di lea di,@@Save_Tmp push di cld mov cx,N push cx@@Input: call GetCursor ;取光标位置 mov ah,1 ;从键盘接受一个字符 int 21h cmp al,CR ;若键入的是回车,已经键入的数字不足N位 jz @@ASC_Dec ;转去处理已经键入的数字 cmp al,KBBack jz @@KB_Back ;若是回空键,重新输入 cmp al,’0’ jb @@KBBack ;若低于数字’0’,重新输入 cmp al,’9’ ja @@KBBack ;若低于数字’9’,重新输入 jmp @@Save_Dig@@KB_Back: dec Cursor_Col inc cx dec di@@KBBack: call SetCursor ;置光标位置 jmp @@Input@@Save_Dig: and al,0fh ;转换成二进制数 stosb ;保存 loop @@Input ;接受下一个数字@@ASC_Dec: mov ax,cx pop cx pop si sub cx,ax ;实际输入的数字位数 xor bp,bp xor dx,dx xor ax,ax jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入’0’处理 dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数 jcxz @@One_Digit ;若输入的数字只有一位,转去直接保存这个二进制数 mov bx,10@@Mul_Ten: lodsb cbw add ax,bp mul bx mov bp,ax loop @@Mul_Ten@@One_Digit:lodsb cbw add ax,bp@@Save_Ret: pop di stosw pop bx pop cx pop dx ret@@Save_Tmp db 16 dup(?)Input_Digit EndP; -----------------------------------------; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示; 入口:AX=二进制数 ; 出口:在当前光标位置显示转换后的ASCII码数字 Dec_ASCII Proc Near push dx push bx push di mov bx,10 lea di,@@Temp_Save mov byte ptr ,’$’ dec di cld @@Divide: xor dx,dx div bx or dl,30h mov ,dl dec di test ax,0ffffh jnz @@Divide inc di push di pop dx mov ah,9 int 21h pop di pop bx pop dx ret @@Temp_Save db 7 dup(?)@@Carry_Yes db ’+’ Dec_ASCII EndP; -----------------------------------------N equ 4 ;输入的十进制整数位数Number1 dw ?Number2 dw ?prompt_One db ’Please the first number: $’prompt_Two db ’Please the second number: $’Start: push cs pop ds push cs pop es ;使数据段、附加段与代码段同段; -----------------------------------------; 输入两个十进制数 Output prompt_One ;提示输入第一个数 lea di,Number1 ;变量Number1的地址 call Input_Digit ;从键盘接受一个N位数字 call enter_CTLF ;输出一个回车、换行 Output prompt_Two ;提示输入第一个数 lea di,Number2 ;变量Number1的地址 call Input_Digit ;从键盘接受一个N位数字 call enter_CTLF ;输出一个回车、换行 call enter_CTLF ;输出一个回车、换行; -----------------------------------------; 加法运算 mov ax,Number1 call Dec_ASCII ;把AX中的二进制有、无符号数转换成显式的十进制ASCII码,并送显示屏显示 mov dl,’+’ call enter_Chr ;显示一个加号 mov ax,Number2 call Dec_ASCII ;显示第二个数 mov dl,’=’ call enter_Chr ;显示一个等号 mov ax,Number1 add ax,Number2 ;Number1+Number2→AX call Dec_ASCII ;显示和 call enter_CTLF ;输出一个回车、换行Exit_Proc: mov ah,4ch ;结束程序 int 21hCode ENDS END Start ;编译到此结束

汇编语言y=sin(x)怎么写详细见图片

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间接寻址的相继的二个存储单元的内容送入SP中LEA SP , //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。LES (Load ES with pointer) 指针送寄存器和ES指令LES REG , SRC //常指定DI寄存器执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已.LAHF ( Load AH with Flags ) 标志位送AH指令LAHF //将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位, SF送D7位, ZF送D6位......执行操作: AH=PSW的低位字节。SAHF ( Store AH into Flags ) AH送标志寄存器指令SAHF //将AH寄存器的相应位送到PSW寄存器的低8位的相应位, AH的D7位送SF, D6位送ZF......执行操作: PSW的低位字节=AH。PUSHF ( PUSH the Flags) 标志进栈指令PUSHF //将标志寄存器的值压入堆栈顶部, 同时栈指针SP值减2执行操作: SP=SP-1,(SP)=PSW的高8位, SP=SP-1, (SP)=PSW的低8位POPF ( POP the Flags ) 标志出栈指令POPF //与PUSHF相反, 从堆栈的顶部弹出两个字节送到PSW寄存器中, 同时堆栈指针值加2执行操作: PSW低8位=(SP), SP=SP+1, PSW高8位=(SP) , SP=SP+1输入输出指令(IN,OUT):只限于使用累加器AX或AL与外部设备的端口传送信息.IN (INput)输入指令:信息从I/O通过累加器传送到CPUIN AL , PORT //直接的字节输入,PORT是外设端口编号(即端口地址),只能取 00H ~ 0FFH共256个端口地址.IN AX , PORT //直接的字输入,AX存储连续两个端口地址PORT+1,PORTIN AL , DX //间接的字节输入,端口地址范围可通过DX设置为0000H ~ 0FFFFH共65536个端口地址IN AX , DX //间接的字输入OUT( OUTput)输出指令 :信息从CPU通过累加器传送到I/OOUT PORT , AL //直接的字节输出,PORT规定与IN指令相同.OUT PORT , AXOUT DX , AL //间接的字节输出OUT DX , AXMOV AL,05H OUT 27H, AL //将字节05H传送到地址27H的端口ADD(ADD)加法指令ADD DST , SRC //Byte/Word执行操作: dst=dst+src1.两个存储器操作数不能通过ADD指令直接相加, 即DST 和SRC必须有一个是通用寄存器操作数.2.段寄存器不能作为SRC 和DST.3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示:CF 根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1, 无进(借)位时CF=0.OF 根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1, 否则为0.ZF 根据结果来设置:不等于0时ZF=0, 等于0时ZF=1SF 根据结果的最高位来设置:最高位为0, 则SF=0.AF 根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1, 无进(借)位时AF=0PF 根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0, 为偶数时PF=1ADC( ADd with Carry)带进位加法指令ADC DST , SRC //Byte/Word执行操作: dst=dst+src+CF //与ADD不同之处是还要加上进位标志位的值.INC ( INCrement) 加1指令INC OPR //Byte/Word执行操作: OPR=OPR+11.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存器2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.SUB ( SUBtract ) 不带借位的减法指令SUB DST , SRC //Byte/Word执行操作:dst=dst - src1.DST和SRC寻址方式及规定与ADD相同.2.影响全部标志位.(判断标志位参见ADD)SBB ( SuBtract with Borrow) 带借位减法指令SBB DST , SRC //Byte/Word执行操作:dst= dst - src - CFDEC ( DECrement ) 减1指令DEC OPR //Byte/Word执行操作:OPR = OPR - 1 //除CF标志位, 其余标志位都受影响.NEG ( NEGate ) 求补指令NEG OPR执行操作:opr = 0- opr //将操作数按位求反后末位加1.CMP ( CoMPare ) 比较指令CMP OPR1 , OPR2执行操作:OPR1 - OPR2 //与SUB指令一样执行运算, 但不保存结果.比较情况 无符号数 有符号数A=B ZF=1 ZF=1A》B CF=0 && ZF=0 SF^OF=0 && ZF=0A《B CF=1 && ZF=0 SF^OF=1 && ZF=0A》=B CF=0 || ZF=1 SF^OF=0 || ZF=1A《=B CF=1 || ZF=1 SF^OF=1 || ZF=1MUL ( unsigned MULtiple ) 无符号数乘法指令MUL SRC //Byte/Word .执行操作:Byte =》 AX= AL *src //字节运算时目的操作数用AL, 乘积放在AX中Word =》 DX=AX *src //字运算时目的操作数用AX, DX存放乘积的高位字, AX放乘积的低位字1.目的数必须是累加器 AX 或AL,指令中不需写出2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.IMUL (sIgned MULtiple) 有符号数乘法指令IMUL SRC //与MUL指令相同,但必须是带符号数DIV ( unsigned DIVide) 无符号数除法指令DIV SRC //Byte/Word 其中: SRC的规定同乘法指令MUL执行操作:Byte =》 AX / src //字节运算时目的操作数在AX中,结果的商在AL中 ,余数在AH中Word=》 DX,AX /src //字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中 ,余数在DX中存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR srcIDIV (sIgned DIVied) 有符号数除法指令IDIV SRC //Byte/Word 与DIV指令相同,但必须是带符号数CBW (Convert Byte to Word) 字节转换为字指令CBW执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.CWD (Convert Word to Double word) 字转换为双字指令CWD执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH十进制调整指令当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出.在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示.压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串.非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义.压缩的BCD码调整指令DAA (Decimal Adjust for Addition) 加法的十进制调整指令DAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.DAS (Decimal Adjust for Subtraction) 减法的十进制调整指令DAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中.非压缩的BCD码调整指令AAA (ASCII Adjust for Addition) 加法的ASCII调整指令AAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中.AAS (ASCII Adjust for Subtraction) 减法的ASCII调整指令AAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中.MOVS ( MOVe String) 串传送指令MOVB //字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1MOVW //字串传送 DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2执行操作: ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素.在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.MOVS DST , SRC //同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.1.目的串必须在附加段中,即必须是ES:2.源串允许使用段跨越前缀来修饰,但偏移地址必须是.STOS (STOre into String) 存入串指令STOS DSTSTOSB //存放字节串 ( DI ) = ALSTOSW //存放字串 ( DI ) = AX执行品作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值.2.DI所指向的存储单元只能在附加段中,即必须是ES:LODS ( LOaD from String ) 从串取指令LODS SRCLODSB //从字节串取 AL=(SI)LODSW //从字串取 AX= (SI±1) (SI)执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容.1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.2.源串允许使用段超越前缀来改变数据存储的段区.REP (REPeat)重复操作前缀REP String Primitive //其中:String Primitive可为MOVS,STOS或LODS指令执行操作:使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP.方向标志设置CLD (CLear Direction flag) 清除方向标志指令CLD执行操作:令DF=0, 其后执行增量操作STD (SeT Direction flag) 设置方向标志指令STD执行操作:令DF=1, 其后执行减量操作CMPS (CoMPare String) 串比较指令CMPS SRC , DSTCMPSB //字节串比较 (SI)-(DI)CMPSW //字串比较 (SI+1)(SI) - (DI+1)(DI)执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.SCAS (SCAn String ) 串扫描指令SCAS DSTSCASBSCASW执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位.AND, OR , XOR 和 TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同.NOT是单字节操作指令,不允许使用立即数.逻辑运算均是按位进行操作,真值表如下:AND (位与&) OR ( 位或| ) XOR ( 位异或^ )1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 01 & 0 = 0 1 | 0 = 1 1 ^ 0 = 10 & 1 = 0 0 | 1 = 1 0 ^ 1 = 10 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0A:逻辑运算指令AND (and) 逻辑与指令AND DST , SRC //Byte/Word执行操作:dst = dst & src1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位.2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与MOV AL , 39H //AL= 0011 1001BADD AL , 0FH // AL= 0000 1001B3.AND指令典型用法B:取出某一位的值(见TEST)OR (or) 逻辑或指令OR DST , SRC //Byte/Word执行操作:dst = dst | src1.OR指令执行后,将使CF=0, OF=0, AF位无定义,指令执行结果影响SF, ZF和PF标志位.2.常用于将某些位置1.将AL的第5位置1:MOV AL , 4AH // AL=0100 1010BOR AL , 10H // AL=0101 1010BXOR (eXclusive OR) 逻辑异或指令XOR DST , SRC //Byte/Word执行操作:dst = dst ^ src1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志.2.XOR指令使某些位维持不变则与 ’0’ 相异或,若要使某些位取反则与 ’1’相异或.将AL的高4位维持不变,低4位取反:MOV AL, B8H //AL=1011 1000BXOR AL, 0FH //AL=1011 0111B测试某一个操作数是否与另一确定操作数相等:XOR AX , 042EHJZ .... //如果AX==042EH, 则ZF=TRUE(1), 执行JZ...NOT (not) 逻辑非指令NOT OPR //Byte/Word执行操作:opr = ~opr // ~ 01100101 1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.2.NOT指令不影响任何标志位。将AL各位取反:MOV AL,65H //AL=0110 0101BNOT AL //AL=1001 1010BTEST (test) 指令TEST OPR1 , OPR2 //Byte/Word执行操作:opr1 & opr21.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0, OF=0,而AF位无定义.2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假.检测某位是否为1:令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则 JNZ...TEST AL , 0000 00001B //测试AL最低位是否为1:: 令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令JNZ THER //最低位若为1, 则ZF=FALSE(0), 执行JNZ THER, 否则执行下一条指令.或者:先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ...MOV DL , AL //将AL 传送到DL,主要是不要影响AL的值. 以下测试AL的b2位是否为1NOT DL //先对操作数求反TEST 0000 0100B //令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令JZ THER //若AL的b2位为1,则ZF=TRUE(1), 执行JZ THERB:移位指令非循环逻辑移位:把操作数看成无符数来进行移位.SHL ( SHift logical Left )逻辑左移指令SHL OPR , CNT //Byte/Word执行操作:使OPR左移CNT位,并使最低CNT位为全0.1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.2.移位次数由CNT决定.每次将OPR的最高位移出并移到CF,最低位补0.MOV CL , 7 //若移位多次, 先预置移位次数CLSHL DX , CL //CNT可取1或CL寄存器操作数SHR (SHift logical Right) 逻辑右移指令SHR OPR , CNT //Byte/Word同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.非循环算术移位:将操作数看成有符号数来进行移位.SAL (Shift Arithmetic Left) 算术左移指令SAL OPR , CNT //Byte/WordSAL指令与SHL指令完全相同SAR(Shift Arithmetic Right) 算术右移指令SAR OPR , CNT //Byte/WordSAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.循环移位指令ROL ( ROtate Left) 循环左移指令ROL OPR , CNT //Byte/Word每次移位时,最高位移出并同时移到CF和最低位D0.ROR (ROtate Right)循环右移指令ROR OPR,CNT //Byte/Word每次移位时,最低位D0移出并同时移到CF和最高位.带进位循环移位指令RCL (Rotate Left through Carry)带进位循环左移指令RCL OPR,CNT //Byte/WordRCR (Rotate Right through Carry)带进位循环右移指令RCR OPR ,CNT //Byte/Word处理器控制指令CLC (CLear Carry) 进位位置0指令CLC //执行操作后,CF=0CMC (CoMplement Carry) 进位位求反指令CMC //执行操作后,CF=!CFSTC (SeT Carry) 进位位置1指令STC //执行操作后,CF=1NOP (No Operetion) 无操作指令NOP //此指令不执行任何操作,其机器码占一个字节单元HLT (HaLT) 停机指令HLT执行操作后,使机器暂停工作,使处理器CPU处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,CPU继续工作.JMP ( JuMP ) 无条件转移指令名称 格式 执行操作段内直接短跳转 JMP SHORT OPR IP=IP+8 位偏移量段内直接近转移 JMP NEAR PTR OPR IP=IP+16位偏移量段内间接转移 JMP WORD PTR OPR IP=(EA)段间直接转移 JMP FAR PTR OPR IP=OPR 偏移地址, CS=OPR 段地址段间间接转移 JMP DWORD PTR OPR IP=(EA),CS=(EA+2)1.无条件转移到指定的地址去执行从该地址开始的指令.2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容.3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容.条件转移指令:根据上一条指令所设置的条件码(标志位)来判断测试条件.根据五个标志位:ZF、SF、OF、 PF、 CF的两种状态(0 FALSE或1 TRUE)产生10种测试条件.Name Flag Flag == TRUE Zero Falg ZF JE/JZ OPR //结果为零转移JNE/JNZ OPR //结果不为零转移Sign Falg SF JS OPR //结果为负转移JNS OPR //结果为正转移Overflow Flag OF JO OPR //溢出转移JNO OPR //不溢出转移Parity Flag PF JP/JPE OPR //结果为偶转移 JNP/JPO OPR //结果为奇转移Carry Flag CF JC OPR //有进位转移 JNC OPR //无进位转移两个数比较:情况 指令 满足条件 指令 满足条件A 《 B JC CF==1 JL SF^OF==1 && ZF==0A ≥ B JNC CF==0 JNL SF^OF==0 || ZF==1A ≤ B JNA CF==1 || ZF==1 JLG SF^OF==1 || ZF==1A 》 B JA CF==0 && ZF==0 JG SF^OF==0 && ZF==0测试CX转移指令JCXZ OPR //CX==0时转移LOOP(LOOP)循环指令LOOP OPR 测试条件:CX ≠ 0 //OPR在程序中实际是个标号LOOPZ OPR 测试条件:ZF == 1 && CX ≠ 0LOOPNZ OPR 测试条件:ZF == 0 && CX ≠ 0执行操作: 先执行CX=CX-1,再检测上面的测试条件,如满足则IP=IP+符号扩展的D8,不满足则退出循环.过程调用及返回指令CALL (CALL) 过程调用指令CALL DST //DST在程序中实际是子程序标号执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序.调用方式 格式 断点保护入栈情况 过程入口地址段内直接 CALL NEAR PTR PR1 (SP-1)(SP-2)←IP , CS不进栈 CS值保持不变,IP←DST段内间接 CALL WORD PTR (EA) (SP-1)(SP-2)←IP , CS不进栈 CS值保持不变,IP←(EA)段间直接 CALL FAR PTR PR1 (SP-1)(SP-2)←CS , (SP-3)(SP-4)←IP IP←DST偏移地址,CS←DST段地址段间间接 CALL DWORD PTR (EA) (SP-1)(SP-2)←CS , (SP-3)(SP-4)←IP IP←(EA),CS←(EA+2)注:为了表明是段内调用,可使用NEAR PTR属性操作符作说明.RET(RETurn)子程序返回指令RETRET EXP //带立即数返回子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序.返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.

汇编语言输入命令怎么编,就是从键盘上能直接敲入 屏幕能显示

如果是8086汇编,调用DOS中断就可以了,int 21h,ah=0a时输入,ah=09时输出如:assume cs:code, ds:datadata segmentbufferdb256, 00buf_condb256 dup(0), ’$’data endscode segmentstart:movax, datamovds, axmovdx, buffermovah, 0aint21hmovdx, buf_conmovah, 09int21hmovax, 4c00hint21hcode endsend start汇编语言的科学定义,其实就是介于机器码(各种01)和高级语言(如C)之间的一种语言。你用C语言写一段程序,其实要在机器上运行的话,机器是不懂的,要经过编译器、汇编器编译,变成汇编,最终再变成机器码,机器根据这些机器码的01可以控制硬件电路完成你程序想执行的操作。

以上就是我们为大家找到的有关“汇编语言输入输出指令(汇编语言中输入输出指令中dx为什么是8位而不是16位)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。