
一、数据位传送指令:
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值(使用查表程序)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)