汇编指令多少个,汇编里面怎么把一般的指令换成是16位操作指令啊
来源:整理 编辑:亚灵电子网 2023-04-19 14:58:59
本文目录一览
1,汇编里面怎么把一般的指令换成是16位操作指令啊
指令MOV AH,12MOV AL,84中的12和84,是十进制的吧,要改成16位的,分别把这两个数转换成十六进制数0CH和54H,然后,MOV AX,0C54H就达到同样的效果了。补充回答: 若12和84都是十六进制数的话,则,MOV AX,1284H是正确的。
2,汇编movl指令求指教
这个问题蛮有意思!首先,如果你把fun函数改成void fun(int a,int b) int c = a + b;}就会出现你期望的汇编代码其次,为什么是movl $3, -4(%ebp)和movl $4, -8(%ebp)呢?貌似没理由啊仔细分析就知道了:movl %esp, %ebp #把栈顶指针赋给ebpsubl $16, %esp #esp向上移动16个单位,相当于开辟了4个局部int,这时的ebp就相当于栈底了所以-4(%ebp)就是第一个局部变量,-8(%ebp)是第二个局部变量。怎么int a,b变成了局部变量了?? 因为fun函数虽然传了参数但是参数直接被覆盖了(根本就没用),或者把代码改成这样就明白了:void fun(int *a, int *b) *a = 3; *b = 4;}
3,关于OUT汇编指令的问题
OUT 03F8H,AL(这个指令有错误为什么?)
这是因为在OUT指令中直接用数字寻址,端口号只能是0到FFH,而上面这条
指令应改为
mov dx,03f8h ;只能放在DX,这是规定
out dx,al
-----------------------------------------
OUT 0FAH,AL(它是指从AL中输出一个字节到0FAH的一个端口吗?)
是的
---------------------------------------
OUT 0FAH,AX(AX是一个字为什么也能输出到0FAH所指的8位端口中呢?)
这条指令将AL中的数据放在0FAH,将AH中的数据放在0FBH
这四条指令主要就是说明这个OUT指令的不同用法
学这些指令不用硬记每条指令的各种用法,只要根据规定的寻址方式
记住相应指令所要用到的特定寄存器就行了
4,汇编语言这段指令是什么意思呀懂的来越详细越好
兄弟,我来告诉你. 定义为字单元,故高地址内容用00h补充. 从0010h单元开始,0011h,0012h,0013h,0014h单元的内容依次为01h,00h,02h,00h,16h. 这是因为$表示当前地址,因此:$+2=14h+02h=16h.故答案:16hPUSH CS POP AX ADD AX,1000 PUSH AX POP DS ;以上设定数据段基址 MOV SI,0000;指定段首 MOV CL,0F ;CL赋10 XOR AX,AX ;AX清零010E:MOV [SI],AL;AL值送数据段[SI]指定处 INC SI;SI+1->SI INC AL DEC CL ;CL减1 JNZ 010E ;以上将0~F依次存入数据段 MOV CX,0010011A:MOV [SI],AL INC SI DEC AL LOOP 011A ; 将F~0依次存入数据段 INT 20
5,汇编中INC是什么意思
加1指令 INC指令功能 目标操作数+1INC指令只有1个操作数,它将指定的操作数的内容加1,再将结果送回到该操作数。INC指令将影响SF,AF,ZF,PF,OF标志位,但是不影响CF标志位。INC指令的操作数的类型可以是通用寄存器或存储单元,但不可以是段寄存器。字或字节操作均可。对于存储单元,需要用BYTE PTR或者WORD PTR说明是字节还是字操作。加1指令 INC指令功能 目标操作数+1INC指令只有1个操作数,它将指定的操作数的内容加1,再将结果送回到该操作数。INC指令将影响SF,AF,ZF,PF,OF标志位,但是不影响CF标志位。INC指令的操作数的类型可以是通用寄存器或存储单元,但不可以是段寄存器。字或字节操作均可。对于存储单元,需要用BYTE PTR或者WORD PTR说明是字节还是字操作。inc是汇编语言中算术运算类指令【指令格式】inc dst【指令功能】起到加1的功能。(dst)←(dst)+1inc只有一个操作数,它将指定的操作数内容加1,再讲结果送回到该操作数。inc影响sf,zf,af,pf,of标志位,但不影响cf。inc指令中操作数的类型可以是通用寄存器或存储单元,但不能是段寄存器。字节操作或者 是字操作均可。对于存储单元,需要在指令中说明操作数类型(字节还是字)例如:inc byte ptr[]bx [di];字节操作 src是source的缩写,,指指令的源操作数
6,c语言编程求abc三个数的最大值
abc三个数的最大值是33,77,2。简介:编程语言(programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。虽然大多数的语言可以既可被编译又可被解译,但大多数仅在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序,然后再使用虚拟器转换到可以运行于机器上的真实代码。如果所使用的翻译的机制是将所要翻译的程序代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被成为编译。因此,一个编译器是一个将人可阅读的程序文本(叫做源代码)作为输入的数据,然后输出可执行文件(object code)。所输出的可执行文件可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。汇编语言的实质和机器语言是相同的,都是直接对 硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成: 指令、 伪指令和 宏指令。 汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。因为你在输入数字是逗号是用的中文输入法,换成英文的就没问题了12345678910111213141516171819 #include<stdio.h>intmain() intmax(int,int,int); inta,b,c,sum; scanf("%d %d %d",&a,&b,&c);////////////// sum=max(a,b,c); printf("max=%d\n",sum); return0;}intmax(intx,inty,intz) intm; if(x>y) m=x; elsem=y; if(m>z) m=m; elsem=z; returnm;}你那个编法太复杂,稍微改了一下:#include<stdio.h>int max(int x,int y);int main() int a,b,c,sum; scanf("%d,%d,%d",&a,&b,&c); sum=max(max(a,b),c); printf("max=%d\n",sum); return 0;}int max(int x,int y) if(x>y) return x; return y;}运行结果:33,77,2max=77
7,汇编中的TEST指令
test属于逻辑运算指令,其功能为功能执行BIT与BIT之间的逻辑运算和测试功能(两操作数作与运算,仅修改标志位,不回送结果)。Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。EST AX, BX与AND AX, BX命令有相同效果。TEST语法规格:TEST r/m,r/m/data。其影响标志包括:C,O,P,Z,S(其中C与O两个标志会被设为0)。test的运用举例:利用Test指令测试一个位,例如寄存器:test eax, 100b;/b后缀意为二进制/jnz ******;/如果eax右数第三个位为1,jnz将会跳转/jnz跳转的条件非0,即ZF=0,ZF=0意味着零标志没被置位,即逻辑与结果为1。扩展资料与汇编指令test功能相仿的还有cmp指令,CMP属于算术运算指令,其功能为功能为比较两个值(寄存器,内存,直接数值),与Test指令的测试功能相仿,其语法格式为CMP r/m,r/m/data,影响的标志位包括C,P,A,Z,O。CMP比较.(两操作数作减法,仅修改标志位,不回送结果)。cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志)。零标志很像carry,也是内部标志寄存器的一位。参考资料来源:百度百科-test(汇编指令)参考资料来源:百度百科-CMP指令test执行的就是的结果,而是根据and的结果设置flags寄存器的各种标志test al, 08h 就是测试al的第4位是不是1,8h = 0000 1000同理test ax, 0200h 测试ax的第10位, 0200h = 0000 0010 0000 0000test cl, 01h 测试cl的第1位,01h = 0000 0001比如test al, 01hjz zero ; al的第一位是0jnz one ; al的第一位是1看过破解教程,都知道test,cmp是比较关键,可是我一直不清楚它们究竟是怎么比较的,最后下决心找了很多资料,和大家一起把它们弄清楚.首先看看:状态寄存器(即标志寄存器)PSW(Program Flag)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF条件码:①OF(Overflow Flag)溢出标志,溢出时为1,否则置0.标明一个溢出了的计算,如:结构和目标不匹配.②SF(Sign Flag)符号标志,结果为负时置1,否则置0.③ZF(Zero Flag)零标志,运算结果为0时置1,否则置0.④CF(Carry Flag)进位标志,进位时置1,否则置0.注意:Carry标志中存放计算后最右的位.⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0.⑥PF(Parity Flag)奇偶标志.结果操作数中1的个数为偶数时置1,否则置0.控制标志位:⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。⑧IF(Interrupt Flag)中断标志。⑨TF(Trap Flag)陷井标志。为举例方便说一下jnz和jz测试条件JZ ZF=1 JNZ ZF=0 即Jz=jump if zero (结果为0则设置ZF零标志为1,跳转)Jnz=jump if not zero好,接着来看test和cmp*******************************************************************************test属于逻辑运算指令功能: 执行BIT与BIT之间的逻辑运算测试(两操作数作与运算,仅修改标志位,不回送结果). Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST AX,BX 与 AND AX,BX 命令有相同效果语法: TEST r/m,r/m/data影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0)运用举例:1.Test用来测试一个位,例如寄存器:test eax, 100b; b后缀意为二进制jnz ******; 如果eax右数第三个位为1,jnz将会跳转我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1.2.Test的一个非常普遍的用法是用来测试一方寄存器是否为空:test ecx, ecxjz somewhere如果ecx为零,设置ZF零标志为1,Jz跳转*******************************************************************************CMP属于算术运算指令功能: 比较两个值(寄存器,内存,直接数值) 语法: CMP r/m,r/m/data 标志位: C,P,A,Z,OCMP比较.(两操作数作减法,仅修改标志位,不回送结果). cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志).零标志很像carry,也是内部标志寄存器的一位.例如:Cmp eax, 2; 如果eax-2=0即eax=2就设置零标志为1Jz ****; 如果设置了零标志就跳转*******************************************************************************我得出的结论test逻辑与运算结果为零,就把ZF(零标志)置1;cmp 算术减法运算结果为零,就把ZF(零标志)置1test指令是测试指令,用于测试某些位是否为0,执行的是与运算,并且会将CF和OF置0,并且影响SF,ZF。若测试的位均为0,则SF=0,ZF=1。举个例子吧。MOV AL,40HTEST AL,08H执行起来就是0100 0000(40H)0000 1000(08H)意思就是测试40H的左起第四位是否为0.测试的结果是为0,所以各标志位的状态是:CF=0,OF=0,SF=0,CF=1test a, b先temp = a and b然后根据temp结果置各种标志的位af, sf, pf, of, cf, zf...执行对a, b值无影响
文章TAG:
汇编指令多少个汇编 汇编指令 指令