汇编语言指令有哪些

汇编语言指令有哪些,第1张

一、数据位传送指令

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 把字d出堆栈;

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

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

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

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

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

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

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

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

14、XLAT 字节查表转换;

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

16、返回 AL 为查表结果。( [BX+AL]->AL )

data segment

num1 db 'please input a number(0-9):',0dh,0ah,'$' ;(这的0dh,0ah起什么作用?回车换行作用如果没有这些,则你输入的数,将出现在please这句话的后面)

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov dx,28bh

mov al,80h

out dx,al

l1: call crlf ;(为什么写入控制字后就开始调用过程?这要看这个被调用的过程有什么作用了)

lea dx,num1

mov ah,09h

int 21h

mov ah,01h

int 21h

cmp al,'0'

jb exit

cmp al,'9'

ja exit

sub al,30h

lea bx,led

xlat

mov dx,288h

out dx,al

jmp l1

exit: mov ah,4ch

int 21h

crlf proc near ;(重点! 这个过程实现什么功能:回车换行作用)

mov dl,0dh ;直接把ODH送入DL就可以实现回车吗:不,现在是先将回车符送入DL,再调用中断显示出来

mov ah,02h ;这个中断指令有什么功能:将DL中的数据,显示在显示屏上

int 21h

mov dl,0ah ;直接把OAH送入到DL就可以实现换行吗:原理同上

mov ah,02h

int 21h

ret

crlf endp

code ends

end start

; 下面的程序是16位汇编,编译通过,运行正确。

; Program Name: Digi_ASCASM

Digi_ASC SEGMENT

ASSUME CS:Digi_ASC,DS:Digi_ASC

ORG 100H

Start: JMP Begin

; 功能:取光标位置

; 入口:无

; 出口:DH=行号,DL=列号

; 用法:GetCursor

GetCursor Macro

PUSH AX

PUSH BX

XOR BX,BX

MOV AH,3

INT 10H

POP BX

POP AX

EndM

; 功能:置光标位置

; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)

; 用法:SetCursor Cursor_Row,Cursor_Col

SetCursor Macro Cursor_Row,Cursor_Col

PUSH BX

PUSH AX

MOV DH,Cursor_Row

MOV DL,Cursor_Col

XOR BX,BX

MOV AH,2

INT 10H

POP AX

POP BX

EndM

Accept_Num DB 'Please input a number(0-9),Press Esc to Exit:$'

DigitalChr DB 'The ASCII of '

DigASCII DB 0,' is ',2 DUP(' '),'H$' ; 数字的ASCII数字

ASCII_Tab DB '0123456789'

Exit_Mark DB 0

; Subroutine

GLOBAL Get_Num:NEAR ;从键盘接受一个数字

Get_Num Proc Near

MOV AH,9

INT 21H

@@InputChr:

MOV AH,1

INT 21H

CMP AL,27 ;Esc

JZ @@Set_Exit

CMP AL,'0'

JB @@InputChr

CMP AL,'9'

JG @@InputChr

RET

@@Set_Exit:

INC Exit_Mark ;置退出标志

Ret

Get_Num EndP

Begin: MOV AX,3

INT 10H ;设置视频显示方式为80x25 16色文本方式

AcceptNum:LEA DX,Accept_Num ;提示输入一个1位数字符串地址

Call Get_Num ;从键盘接受一个数字

CMP Exit_Mark,1

JZ Exit_Proc ;若退出标志置位,则结束程序

MOV DigASCII,AL ;保存这个1位数

AND AL,0FH

LEA BX,ASCII_Tab

XLAT

CBW

MOV CX,4

SHL AX,CL

SHR AL,CL

OR AX,3030h

XCHG AH,AL

MOV WORD PTR DigASCII[5],AX

GetCursor

INC DH ;行号增1

INC DH ;行号增1

SetCursor DH,0

LEA DX,DigitalChr ;显示这个数的ASCII码

MOV AH,9

INT 21H

GetCursor

INC DH ;行号增1

INC DH ;行号增1

SetCursor DH,0

JMP AcceptNum

Exit_Proc:MOV AX,4C00H ;结束程序

INT 21H

Digi_ASC ENDS

END Start

补充回答:第二题,请另行提问。

查表的伪指令是数据定义的那种,也就是DB,DD,如

TABLE DB '0','1','4','9','16','25','36','49','64','81'

示例程序

;输入0~9的数字,通过查表得到其平方值,并显示在屏幕上

DATAS SEGMENT

TABLE DB '0','1','4','9','16','25','36','49','64','81'

BUF DB 'PLEASE INPUT ONE NUMBER(0~9):',0DH,0AH,'$'

DATAS ENDS

STACKS SEGMENT STACK

DB 100 DUP()

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX

LEA DX,BUF;显示字符串:PLEASE INPUT ONE NUMBER(0~9):

MOV AH,09H

INT 21H

MOV AH,07H;无回显的键盘输入

INT 21H

AND AL,0FH;将ASCII码转成相应的十进制数

MOV BX, OFFSET TABLE;寻表

MOV AH ,0

ADD BX,AX

MOV DL,[BX]

MOV AH,02H

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

建表太麻烦了,我就把中间用到的关键指令给楼主吧(注:我用的是nasm)

mov al,[十六进制值]

mov bx,表首地址

xlat

这三步即可使得al中的结果为对应十六进制数的ASCII码了。

DSEG SEGMENT

n equ 10

BUFFER DB 9,11,2,7,21,13,2,0,14,3

DSEG ENDS

CSEG SEGMENT

assume cs:CSEG, ds:DSEG

MAIN PROC FAR ;主程序入口

mov ax, dseg

mov ds, ax

mov cx,n

dec cx

loop1: mov di,cx

mov bx,0

loop2: mov al,buffer[bx]

cmp al,buffer[bx+1]

jge continue

xchg al,buffer[bx+1]

mov buffer[bx],al

continue: add bx,1

loop loop2

mov cx,di

loop loop1

mov ah,1;按任意键退出

int 21h

mov ax, 4c00h ;程序结束,返回到 *** 作系统系统

int 21h

MAIN ENDP

CSEG ENDS

END MAIN

以上就是关于汇编语言指令有哪些全部的内容,包括:汇编语言指令有哪些、求 汇编语言 程序 注释、汇编语言程度题:从键盘上输入字符0~9,要求从屏幕上输出其ASCII值(使用查表程序)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9831779.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存