汇编语言

阅读 / 问答 / 标签

汇编语言org指令怎么用??

伪指令org用来规定目标程序存放单元的偏移量。比如,如果在源程序的第一条指令前用了如下指令:org200h那么,汇编程序会把指令指针的ip的值设成200h,即目标程序的第一个字节放在200h处,后面的内容则顺序存放,除非遇上另一个org语句

Pascal属于汇编语言还是高级语言?

pascal是高级语言。delphi用的是面向对象的pascal(oopascal),它和早先的pascal是有很大区别的。如果你是想问delphi里用的pascal,那么在delphi区提问即可。

汇编语言里PTR什么意思? C++里面又是什么意思?

ptr -- pointer (指针)缩写。汇编里面 ptr 是规定 的 字 (保留字)。mov ax,bx ;是把BX寄存器“里”的值赋予AX,由于二者都是word型,不用wordmov ax,word ptr [bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。由于只是给出一个内存地址,不知道希望赋予ax的,是byte还是word,所以需要用word明确指出!c语言里 ptr 是 程序员自己 写的变量名字,不是保留字。当然,它可以是 指针。例如: float a[5];float *ptr;ptr = &a[0];

抢答器 汇编语言程序

data segment CountDown = 5;倒计时的秒数,也是抢答时间上限,不要超过9秒 msgCD db "CountDown","$" msgU db "User " Uid db ? db ": " Time db ?,".",?,?," Seconds.$" UKey db "qzpm";按键ASCII码 UCount = ($-UKey);抢答人数 msg db "Press Any key to Exit!$" msg1 db "No one Press!$" StartTC dw ?,? ;抢答开始时钟计数 EndTC dw ?,? ;抢答结束时钟计数data endsPRTSTR MACRO X;输出字符串 LEA DX,X MOV AH,09H INT 21HENDMSETXY MACRO X,Y;设置光标位置,X=行,Y=列 XOR BH,BH MOV AH,02H MOV DH,X MOV DL,Y INT 10HENDMcode segmentassume cs:code,ds:data DELAY PROC far;延时一秒 PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,02H INT 1AH MOV BL,DH D_P:MOV AH,02H INT 1AH CMP BL,DH JZ D_P POP DX POP CX POP BX POP AX RET DELAY ENDPstart: mov ax,data mov ds,ax ;设置80×25黑白字符显示模式 MOV AH,00H MOV AL,02H INT 10H SETXY 12,35 PRTSTR msgCD;屏幕中间显示CountDown ;倒计时开始 xor cx,cx mov cl,CountDown @@: SETXY 13,40 mov dl,cl add dl,30h mov ah,02h int 21h;显示倒计时秒数 call DELAY;延时一秒 loop @B SETXY 13,40 mov dl,cl add dl,30h mov ah,02h int 21h ;抢答计时开始 mov ah,0 int 1ah ;cx:dx=获得自午夜以来的时钟计数,每秒18.2次. mov StartTC,dx mov StartTC+2,cx;保存抢答开始时钟计数 mov bx,CountDown*91/5;CountDown秒所经过的时钟数 add dx,bx adc cx,0 mov EndTC,dx mov EndTC+2,cx ;计算并保存抢答结束计数L_again: mov ah,06h mov dl,0ffh int 21h or al,al jz L_test;没按键则直接检测是否已到抢答时间上限 xor si,si@@: cmp UKey[si],al je L_Press inc si cmp si,UCount jb @BL_test: mov ah,0 int 1ah mov bx,EndTC mov ax,EndTC+2 sub bx,dx sbb ax,cx jae L_again SETXY 14,33 PRTSTR msg1 jmp @FL_Press: mov ah,0 int 1ah;获得按键时刻的时钟数 inc si mov ax,si add al,30h mov Uid,al;存贮按键用户编号 mov bx,StartTC mov ax,StartTC+2 sub dx,bx sbb cx,ax;计算从计时开始到按键经过的时钟数,最后存在dx中 mov ax,1000 mul dx mov bx,182 div bx;将时钟数换算成百分秒数,存放在ax中 mov bl,100 div bl;计算整秒数,结果在al中 add al,30h mov Time,al mov al,ah xor ah,ah mov bl,10 div bl;计算十分秒数,结果在al中 add al,30h mov Time+2,al add ah,30h mov Time+3,ah;百分秒 SETXY 14,34 PRTSTR msgU@@: SETXY 15,29 PRTSTR msg@@: mov ah,06h mov dl,0ffh int 21h;等待用户按键退出 cmp al,0 je @Bmov ax,4c00h int 21hcode endsend start

汇编语言中的PUSH的用法

  push,汇编术语,实现压入操作的指令是PUSH指令;实现弹出操作的指令是POP指令。  PUSH的操作过程是:  (SP)<--(SP)-2,((sp))<--OPRD即先修改堆栈指针SP(压入时为自动减2),然后,将指定的操作数送入新的栈顶位置,简单来说:减2就是指针上移2个单元。  此处的((SP))<--OPRD,也可以理解为:  [(SS)*16+(SP)]<--OPRD或[SS:SP]<--OPRD  3.示例:PUSHDX  PUSHBP  PUSHCS  PUSHDATA1  PUSHALFA[BX][SI]  注意:每进行一次压入操作,都压入一个字(16位)。

汇编语言中的PUSH的用法?

PUSH的操作过程是: (SP)<--(SP)-2,((sp))<--OPRD 即先修改堆栈指针SP(压入时为自动减2),然后,将指定的操作数送入新的栈顶位置。用法示例:push ax ;将AX寄存器的值压入栈顶push 1 ;将数值1压入栈顶

汇编语言中的PUSH的用法

PUSH的操作过程是: (SP)<--(SP)-2,((sp))<--OPRD 即先修改堆栈指针SP(压入时为自动减2),然后,将指定 的操作数送入新的栈顶位置。此处的((SP))<--OPRD,也可以理解为:[(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD示例: PUSH DXPUSH BPPUSH CSPUSH DATA1PUSH ALFA[BX][SI]注意: 每进行一次压入操作,都压入一个字(16位)。扩展资料PUSH 指令PUSH 指令首先减少ESP的值,再将源操作数复制到堆栈。操作数是16位的,则ESP减 2,操作数是32位的,则 ESP减4,PUSH指令有3种格式:PUSH reg/mem16PUSH reg/mem32PUSH inm32

试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数。

楼主您好,可以用C给您做么

汇编语言中的堆栈段指针是干什么的

用于指向堆栈的栈顶,以方便管理堆栈.

请哪位高人帮我把这段C语言代码转换成MIPS汇编语言

1 .file "6.c"2 .section .rodata3 .LC0:4 .string "350257267350276223345205245344270200344270252345255227347254246344270262:"5 .align 86 .LC1:8 .text9 .globl main10 .type main, @function11 main:12 .LFB0:13 .cfi_startproc14 pushq %rbp15 .cfi_def_cfa_offset 1616 .cfi_offset 6, -1617 movq %rsp, %rbp18 .cfi_def_cfa_register 619 addq $-128, %rsp20 movq %fs:40, %rax21 movq %rax, -8(%rbp)22 xorl %eax, %eax23 leaq -112(%rbp), %rdx24 movl $0, %eax25 movl $12, %ecx26 movq %rdx, %rdi27 rep stosq28 movq %rdi, %rdx29 movl %eax, (%rdx)30 addq $4, %rdx31 movl $0, -116(%rbp)32 movl $.LC0, %edi33 call puts34 leaq -112(%rbp), %rax35 movq %rax, %rdi36 call gets37 movl $0, -120(%rbp)38 jmp .L239 .L5:40 movl -120(%rbp), %eax41 cltq42 movzbl -112(%rbp,%rax), %eax43 cmpb $96, %al44 jle .L345 movl -120(%rbp), %eax46 cltq47 movzbl -112(%rbp,%rax), %eax48 cmpb $122, %al49 jle .L450 .L3:51 movl -120(%rbp), %eax52 cltq53 movzbl -112(%rbp,%rax), %edx54 movl -116(%rbp), %eax55 cltq56 movb %dl, -112(%rbp,%rax)57 addl $1, -116(%rbp)58 .L4:59 addl $1, -120(%rbp)60 .L2:61 movl -120(%rbp), %eax62 cltq63 movzbl -112(%rbp,%rax), %eax64 testb %al, %al65 jne .L566 movl -116(%rbp), %eax67 cltq68 movb $0, -112(%rbp,%rax)69 movl $.LC1, %edi70 call puts71 leaq -112(%rbp), %rax72 movq %rax, %rdi73 call puts74 movq -8(%rbp), %rdx75 xorq %fs:40, %rdx76 je .L677 call __stack_chk_fail78 .L6:79 leave80 .cfi_def_cfa 7, 881 ret82 .cfi_endproc83 .LFE0:84 .size main, .-main85 .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"86 .section .note.GNU-stack,"",@progbits

汇编语言中中断INT和子程序调用CALL保护现场时分别压入堆栈的是什么?

int指令相当于pushfpush cspush ipjmp xxxx:xxxxcall指令不保存标志寄存器call分为远调用和进调用远调用压入段寄存器和返回地址近调用只压入返回地址

汇编语言CALL指令都将什么压入堆栈?INT指令呢?

首先指令寄存器在16/32/64位下分别是IP,EIP,RIP,标志寄存器是FLAGS,EFLAGS,RFLAGS下面都以32位为例CALL将下一条指令的CS:EIP压入堆栈INT要看是什么模式,还有是否更改CPL,行为比较复杂,反正最后压入堆栈的三个是EFLAGS,CS和下一条指令的EIP具体可以参考Intel或AMD的文档

汇编语言调试中syntax error是什么意思

Mov al,@40h等等语法错误

汇编语言中mem和reg代表什么

mem表示内存地址reg指的是寄存器

汇编语言中 RL 代表什么啊?

汇编语言中 RL 指令代表循环左移,即累加器A中的8位数据向左循环移位一次,位7循环移入位0,位0进入位1,以此类推,不影响标志。例如:MOV A,#00111100RL A;A=01111000RL A;A=11110000RL A;A=11100001

汇编语言sti和cli作用

是不是AVR单片机中的,sti置1,cli把全局中断I清0

【一些常用的汇编语言指令】汇编语言cli指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV :寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS 不能作为目的;指令指针IP 不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG 交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器 存储器操作数 传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器 存储器操作数 传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS 中。 LES :同上,只是16位段基址送ES 中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数, 操作数不能是CS 和立即数 标志操作指令 LAHF :把标志寄存器低8位,符号SF ,零ZF ,辅助进位AF ,奇偶PF ,进位CF 传送到AH 指定的位。不影响标志位。 SAHF :与上相反,把AH 中的标志位传送回标志寄存器。 PUSHF :把标志寄存器内容压入栈顶。 POPF :把栈顶的一个字节传送到标志寄存器中。 CLC :进位位清零。 STC :进位位为1。 CMC :进位位取反。 CLD :使方向标志DF 为零,在执行串操作中,使地址按递增方式变化。 STD :DF 为1。 CLI :清中断允许标志IF 。Cpu 不相应来自外部装置的可屏蔽中断。 STI :IF 为1。 加减运算指令 注意: 对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD 。 ADC :把进位CF 中的数值加上去。 INC :加1指令 SUB 。 SBB :把进位CF 中数值减去。 DEC :减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP :比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF (零)是否被置1判断相等;如果两者是无符号数,可根据CF 判断大小;如果两者是有符号数,要根据SF 和OF 判断大小。 乘除运算指令 MUL 操作数 :无符号数乘法指令。操作数不能是立即数。操作数是字节与AL 中的无符号数相乘,16位结果送AX 中。若字节,则与AX 乘,结果高16送DX ,低16送AX 。如乘积高半部分不为零,则CF 、OF 为1,否则为0。所以CF 和OF 表示AH 或DX 中含有结果的有效数。 IMUL 操作数 :有符号数乘法指令。基本与MUL 相同。 DIV 操作数 :被除数是在AX (除数8位)或者DX 和AX (除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV :有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW ,CWD : 把AL 中的符号扩展到寄存器AH 中,不影响各标志位。CWD 则把AX 中的符号扩展到DX ,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT :取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0标志) SF(符号)反映运算结果,AF (辅助进位)未定义。自己与自己AND 值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1) OR 操作数1 操作数2:自己与自己OR 值不变,CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0标志)SF (符号)反映运算结果,AF (辅助进位)未定义。她使用于将若干位置1: 与1相或为1,保持不变的位与0相或。(都为0时为0) XOR 操作数1 操作数2:自己与自己异或结果为0,标志CF (进位)、OF (溢出)清0,PF (奇偶)ZF (0)SF (符号)反映运算结果,AF (辅助进位)未定义。主要用于将若干位取反的操作:与1异或取反,与0异或保持不变。(相同为0,不同为1) TEST 操作数1 操作数2:测试指令,和AND 相同,但结果不送操作数1,各标志位同AND 操作。 位移指令 SAL/SHL 操作数 1或CL :算术左移与逻辑左移进行相同的动作,操作数是通用寄存器或者存储器操作数,位移数为1或为CL ;最高位移CF (进位),右边用0补位。左移一次相当源操作数乘2。 SAR 操作数 1或CL :算术右移,位移数为1或为CL ;操作数是通用寄存器或者存储器操作数,左符号位保持不变,移出最低位进CF (进位)。相当源操作数除2。 SHR 操作数 1或CL :逻辑右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL ;左边用0补足,移出的最低位进CF (进位)对于无符号数,右移一位相当于除2。 ROL/ROR 操作数 1或CL : 不带进位左移/右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL 。 RCL/RCR 操作数 1或CL : 带进位左移/右移,CF (进位)参与循环。操作数是通用寄存器或者存储器操作数,位移数为1或为CL 。 转移指令 注意:由于代码段可分为多个段,所以根据转移时是否重置代码段寄存器CS 内容,可分为段内转移和段间转移。段内转移仅重置IP 的转移,转移后指令仍在同一代码段中。段间转移重置CS ,所以转移后继续执行的指令在另一个段中。 JMP 标号 :无条件跳转到标号位置执行,段内直接转移指令。地址差用一个字节表示为短转移,用一个字表示为近转移。 JMP 通用寄存器/存储单元:无条件段间间接转移指令,操作数给定的是目标地址处。 JMP FAR PTR 标号:无条件段间直接转移指令,她的具体动作是把指令中包含的目标地址的段值和偏移分别置茹CS 和IP 。 JMP 操作数:无条件段间间接转移指令,操作数是双字存储单元,给定目标地址,低字节送IP ,高字节送CS 。 条件转移指令:所有的条件转移指令都是段内转移。她是由J 加上相应的含义字母组合成。有符号数关系G (大于),E (等于),L (小于);无符号数关系A (高于)、E (等于)和B (低于);字母N 表示“不”:NB (不小于),NE (不等于)。 循环指令 LOOP 标号:她使寄存器CX 减1,若结果不等于0则转到标号,否则顺序执行LOOP 指令后的指令。最多循环65536次。 LOOPE/LOOPZ 标号:等于/全零循环指令。CX 的值减1,如果结果不等于0,并且ZF (0标志)等于1,则转移到标号。 LOOPNE/LOOPNZ 标号:不等于/非零循环指令,CX 的值减1,如果结果不等于0,并且ZF (0标志)等于0,则跳转到标号。 JCXZ 标号: 该指令实现当寄存器CX 的值等于0转移到标号,否则顺序执行。通常该指令用在循环开始前,以便在循环次数位0时,跳过循环体。

汇编语言sti和cli作用

STI(SetInterrupt)中断标志置1指令使IF=1;CLI(ClearInterrupt)中断标志置0指令使IF=0.它们只影响本指令指定的标志,而不影响其他标志位(即STI和CLI只影响IF)。

高分求一个汇编语言的完整程序!

已发

汇编语言的HIGH和LOW指令怎么用

DA1是你定义的变量,变量是不可以用HIGH和LOW操作的!

汇编语言类型 COMMON

是44H。组合类型为common,表示当前段与其它模块中的同名段重叠,即起始地址相同,最终段的长度等于它们中最长的段的长度。A和B的数据段别名相同,所以LINK A+B后,B的数据段覆盖了A的同名段,所以0000H单元为D,即44H。比如:例1: DSEG SEGMENT PARA COMMONMESS DB "HELLO!", 0DH, 0AH, "$"DSEG ENDS……例2:DSEG SEGMENT PARA COMMONDB "OK"DSEG ENDS……先把这两个源程序模块分别汇编,最后用LINK程序连接,命令如下:LINK 例1 + 例2模块2中的DSEG段与模块1中的DSEG段重叠, 模块2中的CSEG段和模块1中的CSEG段合并成一个段。最后得到了可执行程序的内容如下:0000: 0000 ; 两个段重叠后的结果为 "OKLLO..$"……

C语言转汇编语言(把下面的C语言转成单片机汇编语言)

ORG 0000H LJMP L0062HL0003H: MOV 90H, #0FFH MOV A, 90H MOV R6, #00H JZ L0010H MOV R7, #01H SJMP L0012HL0010H: MOV R7, #00HL0012H: MOV R3, 07H MOV R2, 06H CLR A MOV 90H, A SETB 90H.7 CLR 90H.6 MOV A, R3 ADD A, #01H MOV R7, A CLR A ADDC A, R2 MOV R6, A LCALL L0043H CLR 90H.7 CLR C MOV A, #10H SUBB A, R3 MOV R7, A CLR A SUBB A, R2 MOV R6, A LCALL L0043H SETB 90H.6 MOV R7, #10H MOV R6, #00H LCALL L0043H SETB 90H.7 CLR 90H.6 SJMP L0003HL0043H: SETB C MOV A, R7 SUBB A, #00H MOV A, R6 SUBB A, #00H JC L0061H CLR A MOV R5, A MOV R4, AL004FH: INC R5 CJNE R5, #00H, L0054H INC R4L0054H: CJNE R4, #27H, L004FH CJNE R5, #10H, L004FH MOV A, R7 DEC R7 JNZ L0043H DEC R6 SJMP L0043HL0061H: RET L0062H: MOV R0, #7FH CLR AL0065H: MOV @R0, A DJNZ R0, L0065H MOV 81H, #07H LJMP L0003H MOV R7, A END

请教8086汇编语言中ASSUME伪指令的作用!

先回答你的第一个问题,书上是你那样说的,至于你的第一个疑问是因为ASSUME伪指令只是让数据段寄存器DS与你的数据存储地址,代码段寄存器CS和你的代码段所存储的地址一一对应起来,但是如果你不人为把你的数据段存储地址DSEG传给DS的话,系统是无法获得DSEG的具体物理地址的。对于第二疑问,因为CS:IP是指向CPU将执行的下一条语句,在将程序装载进主存时,系统就已经将CSEG的物理地址传给了CS,所以,对于CS不需要像DS那样人为传递。

汇编语言中伪指令assume有什么实际意义吗

assume,不需要讨论。高版本的 MASM,已经不用这句了。

汇编语言关于assume的用法

  assume:段寄存器的说明语句;  在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下:  ASSUME 段寄存器名:段名[,段寄存器名:段名, ……]  其中:段寄存器是CS、DS、ES、SS、FS和GS,段名是在段定义语句说明时的段名。  在一条ASSUME语句中可建立多组段寄存器与段之间的关系,每种对应关系要用逗号分隔。例如,  ASSUME CS:CODE1, DS:DATA1  上面的语句说明了:CS对应于代码段CODE1,DS对应于数据段DATA1。  注意:代码段寄存器不能由程序员在源程序中对其赋值,其值是由操作系统在装入它进入系统运行时自动赋值的。

汇编语言关于assume的用法

这句伪指令,已经淘汰了。就不必关心了。

汇编语言assume cs:code,ds:datarea 中的:是什么意思

在汇编时其实内部只有偏移地址寻址,而没有变量名寻址。所以汇编时汇编软件会把你写的变量换成偏移地址。而变量是在你假定的段里查找得到偏移地址。一般指令程序放在代码段中,段地址来源于代码段寄存器CS,涉及到一个堆栈操作时,段寄存器为SS,涉及到一个操作数时,段寄存器为DS或者ES。assumecs:code,ds:datarea就是说明相应的操作所在段寄存器。当DS(ES)不指在assume的指明的段中也可以运行,只是会得到另一个段的相应偏移地址处的内容。例如:assumeds:段名1movds,段2movax,段1中的第二个变量。最终结果ax保存的是段2中的对应与段1中第二个变量相同地方的东西(注意是db,dw....)过程:编译器是在段1中查找变量名,并把变量转换为偏移地址,但访问时使用ds:偏移地址这时ds保存的是段2的段地址,所以访问到的是第二个段对应偏移地址的内容。

汇编语言开头 section什么意思

汇编语言是以section为单位来组织源文件的。 Section是相对独立的,具有特定名称,不可分割的指令,或数据序列

汇编语言中data segment什么意思?

下面是汇编的基本框架:定义数据段 就是数据存放的地方DATA SEGMENT.....DATA ENDS定义代码段 当然就是要执行的程序代码了CODE SEGMENTSTART:........CODE ENDSEND START

汇编语言

segment ,assume,都是假定伪指令,假设codes是代码段。。

汇编语言中data segment和dseg segment ,data segment的区别和用法

segment是断定义伪指令dseg,data是用户自定义的段名,尅亿使用其他合法的名称!

汇编语言中data segment什么意思

下面是汇编的基本框架:定义数据段就是数据存放的地方DATASEGMENT.....DATAENDS定义代码段当然就是要执行的程序代码了CODESEGMENTSTART:........CODEENDSENDSTART

SEGMENT在汇编语言中是什么意思

segment是段的意思,是段定义伪指令 汇编中 有数据段,代码段,堆栈段以及附加段 格式: 段名 SEGMENT [定位类型] [组合类型] [类别名] 段名 ENDS 功能:把程序分段,实现存储器的分段管理。 PS:段定义是每个标准汇编程序必须的

汇编语言中data segment什么意思

就是数据段寄存器--DS
 首页 上一页  1 2 3 4