汇编经典代码

合集下载

常见汇编代码

常见汇编代码

常见汇编代码汇编语言是一种低级语言,主要用于编写计算机的指令集。

在程序开发和系统调试中,掌握常见的汇编代码是非常重要的。

本文将介绍一些常见的汇编代码及其用途。

一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将BX寄存器中的数据复制到AX寄存器中。

2. XCHG:交换两个位置的数据。

例如,XCHG AX, BX将AX寄存器和BX寄存器中的数据进行交换。

3. PUSH:将数据推入栈中。

例如,PUSH AX将AX寄存器的数据推入栈中。

4. POP:将数据从栈中弹出。

例如,POP AX将从栈中弹出的数据存储到AX寄存器中。

二、算术指令1. ADD:将两个数相加并将结果存储在目标位置。

例如,ADD AX, BX将AX寄存器和BX寄存器中的数据相加,并将结果存储到AX寄存器中。

2. SUB:将两个数相减并将结果存储在目标位置。

例如,SUB AX, BX将AX寄存器中的数据减去BX寄存器中的数据,并将结果存储到AX寄存器中。

3. MUL:将两个数相乘并将结果存储在目标位置。

例如,MUL AX, BX将AX寄存器和BX寄存器中的数据相乘,并将结果存储到AX寄存器中。

4. DIV:将两个数相除并将结果存储在目标位置。

例如,DIV AX, BX将AX寄存器中的数据除以BX寄存器中的数据,并将商存储到AX寄存器中。

三、逻辑指令1. AND:对两个数进行逻辑与操作,并将结果存储在目标位置。

例如,AND AX, BX将AX寄存器和BX寄存器中的数据进行逻辑与操作,并将结果存储到AX寄存器中。

2. OR:对两个数进行逻辑或操作,并将结果存储在目标位置。

例如,OR AX, BX将AX寄存器和BX寄存器中的数据进行逻辑或操作,并将结果存储到AX寄存器中。

3. XOR:对两个数进行逻辑异或操作,并将结果存储在目标位置。

例如,XOR AX, BX将AX寄存器和BX寄存器中的数据进行逻辑异或操作,并将结果存储到AX寄存器中。

(完整版)8086汇编经典例程,推荐文档

(完整版)8086汇编经典例程,推荐文档

sub bl,26 mov al,'a' add al,bl
MOV CX,00H WAIT1: LOOP WAIT1
;延时计数器 ;延时
DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8
jmp next40
DEC DX
next24: sub bl,52
==========================================
MAIN ENDP
MOV AX,[SI]
5. 编写一个数组排序(从小到大)的小程序,数组在程
序中定义,程序先将原数组显示一遍,然后排序,再
DISP PROC
将排好序的数组显示一遍。
PUSH SI
==========================================
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100
crlf proc push ax push dx
音演奏歌曲 ========================================== ;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽
ccc segment assume cs:ccc,ds:qqq
main proc far start: mov ax,qqq
mov ds,ax
next3:
jmp next10 cmp al,'a' jnae next4 cmp al,'z' ja next4 sub al,'a'

常用汇编代码

常用汇编代码

# 常见汇编代码 #1. 编写程序:比较AX,BX,CX中带符号数的大小,将最大的数放在AX中code segmentassume cs:codemov ax,32mov bx,74mov cx,23sort: cmp ax,bxjge X ;如果ax大于等于bx就跟cx比较xchg ax,bxX:cmp ax,cx ;如果ax大于cxjge Yxchg ax,cxY:int 21hmov ax,4c00hcode endsend sort2.要求对键盘输入的小写字母用大写字母显示出来code segmentassume cs:codestart: mov ah,1int 21hcmp al,'a'jz errorcmp al,'z'ja errorsub al,20h ;'A'~'Z':41~5AH ‘a'~'z':61~7ahmov dl,almov ah,2int 21hjmp starterror:retcode endsend start3.编写程序:从键盘上接收一个四位数的十进制数,并在终端上显示出与它等值的二进制数。

code segmentassume cs:codebegin:xor bx,bx ;清空bxmov ch,4mov cl,4 ;设置内外层的循环次数input:shl bx,cl ;bx中的内容逻辑左移mov ah,1int 21h ;输入cmp al,30h ;是否小于0jb input ;是就重新输入cmp al,39h ;是否大于9ja inputand al,0fh ;转换为相应的二进制jmp combinecombine:or bl,aldec chjnz inputdisplay:mov cx,16 ;输出的循环次数print:mov dl,0rol bx,1rcl dl,1or dl,30h ;清空dlmov ah,2int 21hloop printretcode endsend begin4.将内存ffff:0~ffff:d单元中的数据复制到0:200~0:20d单元中。

汇编指令大全(有注释)_IT计算机_专业资料

汇编指令大全(有注释)_IT计算机_专业资料

汇编指令大全(有注释)_IT计算机_专业资料汇编指令大全(有注释)为了方便开发者理解和使用汇编语言,本文汇编指令大全提供了对常用指令的详细注释。

汇编语言是一种低级编程语言,直接操作计算机的硬件和寄存器。

掌握汇编语言对于理解计算机底层原理和优化程序性能至关重要。

下面列举了一些常用的汇编指令,以供参考。

1. MOV指令:用于将一个数据从一个位置复制到另一个位置。

可以在寄存器和内存之间传输数据。

示例:MOV AX, 10h ; 将数据10h复制到寄存器AX中MOV [BX], AX ; 将寄存器AX中的数据复制到内存地址BX指向的位置2. ADD指令:用于将两个数据相加,并将结果存储在指定的位置。

示例:ADD AX, BX ; 将寄存器AX和BX中的数据相加,并将结果保存在AX中ADD [BX], CX ; 将内存地址BX指向的数据与寄存器CX中的数据相加,并将结果保存在内存地址BX指向的位置3. SUB指令:用于将两个数据相减,并将结果存储在指定的位置。

示例:SUB AX, BX ; 将寄存器AX的数据减去BX的数据,并将结果保存在AX中SUB [BX], CX ; 将内存地址BX指向的数据减去寄存器CX的数据,并将结果保存在内存地址BX指向的位置4. INC指令:用于将指定位置的数据加1。

示例:INC AX ; 将寄存器AX的数据加1INC [BX] ; 将内存地址BX指向的数据加15. DEC指令:用于将指定位置的数据减1。

示例:DEC AX ; 将寄存器AX的数据减1DEC [BX] ; 将内存地址BX指向的数据减16. JMP指令:用于无条件跳转到指定的代码位置。

示例:JMP label1 ; 无条件跳转到标签label1处JMP 100h ; 无条件跳转到内存地址100h处7. CMP指令:用于比较两个数据的大小,并根据比较结果设置条件码寄存器。

示例:CMP AX, BX ; 比较寄存器AX和BX的数据大小,并设置条件码寄存器CMP [BX], CX ; 比较内存地址BX指向的数据和寄存器CX的数据大小,并设置条件码寄存器8. JE指令:用于在两个数据相等时跳转到指定的代码位置。

单片机汇编语言经典一百例

单片机汇编语言经典一百例

单片机汇编语言经典一百例汇编语言是一种底层的程序设计语言,是一种将汇编指令直接翻译成机器指令的语言。

在单片机编程中,掌握汇编语言是非常重要的,因为它可以充分发挥单片机的性能,并且提高程序的运行效率。

本文将介绍一百个经典的单片机汇编语言例子,帮助读者更好地理解汇编语言的使用。

1. 点亮LED灯```ORG 0x0000 ; 程序起始地址MOV P1, #0xAA ; P1口输出高电平,LED灯点亮END ; 程序结束```2. LED流水灯效果```ORG 0x0000 ; 程序起始地址MOV P1, #0x01 ; P1口输出低电平,第一个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x02 ; P1口输出低电平,第二个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x04 ; P1口输出低电平,第三个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x08 ; P1口输出低电平,第四个LED点亮CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```3. 数码管动态扫描显示```ORG 0x0000 ; 程序起始地址CLR P0.0 ; P0.0口输出低电平,选择第一个数码管MOV P2, #0x7E ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.1 ; P0.1口输出低电平,选择第二个数码管MOV P2, #0x30 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.2 ; P0.2口输出低电平,选择第三个数码管MOV P2, #0x6D ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.3 ; P0.3口输出低电平,选择第四个数码管MOV P2, #0x79 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```...通过以上例子,我们可以看到单片机汇编语言的应用非常广泛,可以实现各种各样的功能。

汇编语言程序代码

汇编语言程序代码

BEGIN: MOV AH, 1 ;从键盘输入一个字符的 DOS 调用 INT 21H SUB AL, ‘0’ JB STOP ;输入字符<‘0’吗? CMP AL, 9 ;输入字符>‘9’吗? JA STOP CBW MOV CX, AX ;响铃次数 N JCXZ STOP BELL: MOV DL, 07H ;准备响铃 MOV AH, 2 ;显示一个字符的 DOS 调用,实际为响铃 INT 21H CALL DELAY100ms ;延时 100ms LOOP BELL STOP: RET 5.6 编写程序,将一个包含有 20 个数据的数组 M 分成两个数组:正数数组 P 和负数数组 N, 并分别把这两个数组中数据的个数显示出来。 答:程序如下:
SHR AX, CL ;右移四次 DEC CH JNZ A10 ;循环四次完了码? B10: MOV DL, STORE ;四组数分别放在 AL、BL、CL 和 DL 中 MOV CL, STORE+1 MOV BL, STORE+2 MOV AL, STORE+3 STOP: RET 5.4 试编写一程序,要求比较两个字符串 STRING1 和 STRING2 所含字符是否完全相同,若相 同则显示‘MATCH’,若不相同则显示‘NO MATCH’。 答:程序如下:
DSEG SEGMENT STORE DB 4 DUP (?) DSEG ENDS BEGIN: MOV CL, 4 ;右移四次 MOV CH, 4 ;循环四次 LEA BX, STORE A10: MOV DX, AX AND DX, 0FH ;取 AX 的低四位 MOV [BX], DL ;低四位存入 STORE 中 INC BX
CMP AL, 41H ;又<A 吗? JB INPUT ;不是‘A~F’的数重新输入 CMP AL, 46H ;>F 吗? JA INPUT ;不是‘A~F’的数重新输入 AND AL, 0FH ;转换为:1010B~1111B ADD AL, 9 BINARY: OR BL, AL ;将键盘输入的数进行组合 DEL CH JNZ INPUT DISPN: MOV CX, 16 ;将 16 位二进制数一位位地转换成 ASCII 码显示 DISP: MOV DL, 0 ROL BX, 1 RCL DL, 1 OR DL, 30H MOV AH, 2 ;进行显示 INT 21H LOOP DISP STOP: RET 代码转换; 查表法,实现一位 16 进制数转换为 ASCII 码显示

汇编指令大全

汇编指令大全

汇编指令大全(DST:destination目的操作数/地址;SRC:source源操作数/地址;port:端口;ac:Accumulator累加器;reg:register寄存器;cnt:counter计数器;opr:除了立即数之外的所有寻址方式(寄存器);立即数:直接包含在代码中,作为代码的一部分,不需要保存在寄存器中的操作数,相当于高级语言中的常量;r8/r16:8位通用寄存器/16位通用寄存器;SR:segment register段寄存器,包括DS、SS、ES、CS;mem:memory,表示存储器操作数;addr:address,表示内存单元地址;) [数据传送指令]一、通用数据传送指令1、传送指令 MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)←(SRC) 将原操作数(字节或字)传送到目的地址。

指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。

指令的执行对标志位的影响:不影响标志位。

指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。

2、进栈指令 PUSH (push onto the stack)出栈指令 POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

PUSH SRC (SP)←(SP)-2 ;(SP)←(SRC)POP DST (DST)←((SP));(SP)←(SP)指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。

指令对标志位的影响:PUSH 和 POP指令都不影响标志位。

指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2;POP指令的DST不允许是CS寄存器;3、交换指令 XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)←>(OPR2)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。

汇编指令大全+很全的汇编指令

汇编指令大全+很全的汇编指令

for Addition)
1. 调整操作如下
格式: DAA
(1) 若(AL) and 0FH>9 或 AF=1
,则(AL)<--(AL)+6,AF<--1,对低
功能: 对AL中的两个组合进制数相加的结果进行调 四位的调整.
整,调整结果仍放在AL中,进位标志放在CF中.
(2) 若(AL) and 0F0H>90H 或
6 LAHF 标志传送指令 LAHF 格式: LAHF
2. 本指令不影响状态标位,表格 长度不超过256字节.
说明: 该指令不影响FLAG的原来 内容,AH只是复制了原FLAG的低8 位内容.
功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)<-
-(FLAG)7~0
7 SAHF 标志传送指令 SAHF
说明:
格式: DEC OPRD 功能: OPRD<--OPRD-1
1. OPRD 为寄存器或存储器操作 数.
2. 这条指令执行结果影响AF、 OF、PF、SF、ZF标志位,但不影 响CF标志位.
页码,4/22
星尘-易尘
302 NEG 303 CMP
304 AAS 305 DAS 306 MUL
取补指令 NEG(NEGate)
未组合的十进制加法调整指令 AAA(ASCII Adgust 说明:
for Addition)
1. 组合的十进制数和未组合的
格式: AAA
十进制数:在计算中,十进制数可
用四位二进制数编码,称为BCD
功能: 对两个组合的十进制数相加运算(存在AL中) 码.
的结果进行调整,产生一个未组合的十进制数放在
AX中.
SUB [BX+25],AX

(完整版)单片机汇编语言经典一百例

(完整版)单片机汇编语言经典一百例

51单片机实用程序库4.1 流水灯程序介绍:利用P1 口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。

实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。

程序实例(LAMP.ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;灭所有的灯MOV A,#11111110BMAIN1:MOV P1,A ;开最左边的灯ACALL DELAY ;延时RL A ;将开的灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND4.2 方波输出程序介绍:P1.0 口输出高电平,延时后再输出低电平,循环输出产生方波。

实际应用中例如:波形发生器。

程序实例(FAN.ASM):ORG 0000HMAIN:;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;////////////////////////////////////////////////// DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定时器功能实例5.1 定时1秒报警程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。

实际应用例如:定时报警器。

程序实例(DIN1.ASM):ORG 0000HAJMP MAINORG 000BHAJMP DIN0 ;定时器0入口MAIN:TFLA G EQU 34H ;时间秒标志,判是否到50个0.2秒,即50*0.2=1秒MOV TMOD,#00000001B;定时器0工作于方式1MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒11SETB EA ;开总中断SETB ET0 ;开定时器0中断允许SETB TR0 ;开定时0运行SETB P1.0LOOP: AJMP LOOPDIN0:;是否到一秒//////////////////////////////////////// INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,#00HCPL P1.0;////////////////////////////////////////////////// RE:MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒RETIEND5.2 频率输出公式介绍:f=1/ts51 使用12M晶振,一个周期是1微秒使用定时器1工作于方式0,最大值为65535,以产生200HZ的频率为例:200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电12平或低电平的时间为2500 微秒。

20个简单汇编语言程序

20个简单汇编语言程序

20个简单汇编语言程序以下是20个简单的汇编语言程序示例:1. 计算两个数的和:MOV AX, 5。

ADD AX, 3。

这段代码将 5 存储在 AX 寄存器中,然后将 3 加到 AX 中,最终 AX 中的值为 8。

2. 比较两个数的大小:MOV AX, 5。

CMP AX, 3。

这段代码将 5 存储在 AX 寄存器中,然后将 AX 中的值与 3 进行比较。

3. 循环打印数字:MOV CX, 10。

MOV AX, 1。

LOOP_START:MOV DL, AL.ADD DL, 48。

MOV AH, 2。

INT 21h.INC AL.LOOP LOOP_START.这段代码使用循环打印数字 1 到 10。

4. 计算阶乘:MOV CX, 5。

MOV AX, 1。

LOOP_START:MUL CX.LOOP LOOP_START.这段代码计算 5 的阶乘,并将结果存储在 AX 寄存器中。

5. 判断奇偶数:MOV AX, 7。

AND AX, 1。

这段代码将 7 存储在 AX 寄存器中,然后将 AX 中的值与 1进行与运算,结果为 1,表示奇数。

6. 字符串反转:MOV SI, OFFSET str.MOV DI, OFFSET str.MOV CX, LENGTHOF str.DEC CX.REVERSE_LOOP:MOV AL, [SI]MOV DL, [DI+CX]MOV [DI+CX], AL.MOV [SI], DL.INC SI.LOOP REVERSE_LOOP.这段代码将字符串 `str` 反转。

7. 计算斐波那契数列:MOV CX, 10。

MOV AX, 0。

MOV BX, 1。

FIB_LOOP:ADD AX, BX.XCHG AX, BX.LOOP FIB_LOOP.这段代码计算斐波那契数列的前 10 个数。

8. 判断一个数是否为质数:MOV AX, 17。

MOV BX, 2。

CHECK_PRIME:XOR DX, DX.DIV BX.CMP DX, 0。

汇编经典代码

汇编经典代码

1.顺序程序设计将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

DATASEGMENTDATA1 DB 34H,35H,39H,38H,36H,' ';被加数DATA2 DB 37H,34H,33H,36H,32H,' ';加数DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,DATA1;有效地址送SI,为调用显示子程序做准备CALLDISPLAY;调用显示子程序CALLCRLF;调用回车换行子程序LEA SI,DATA2 ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备CALLDISPLAY;调用显示子程序CALLCRLF;调用回车换行子程序LEADI,DATA1;有效抵制送DI,为加法运算做准备MOVAX,0MOVBX,0MOVCL,05H;记录循环次数ADDS: MOVAL,[SI];将加数送往ALSUBAL,30HADDAL,BL;加上进位MOVBL,[DI];将被加数送往BLSUBBL,30HADDAL,BL;加法运算ADDAL,30HCMPAL,3AHJASUBA;结果>=10,跳到SUBAJBNSUBASUBA:SUBAL,0AH;减去10的值,并置BL为1MOVBL,01HJMPCONTINUENSUBA:MOVBL,00H;置BL为0CONTINUE:MOV[DI],AL;将相加的结果从AL送往DI的地址,即DATA1的地址INCDI;地址加1INCSI;地址加1LOOPADDS;循环JCSHUCHUJNCSHUCHU2SHUCHU2: MOVAL,31H;CF为1设置结果最高位为1JMPCONTINUE2SHUCHU:MOVAL,30H;CF为0设置结果最高位为0CONTINUE2:MOV[DI],ALMOVAX,4C00H;返回DOSINT21HMAINENDPCRLFPROCNEAR;回车、换行于功能 MOVDL,0DHMOVAH,02H INT21H MOVDL,0AHMOVAH,02H INT21HRETCRLFENDPDISPLAY PROCNEAR ;显示于功能MOVBX,0006H ;记录循环次数DSL:MOVDL,[SI+BX-1];将有效地址内的内容送往DLMOVAH,02 ;2号功能输出INT21HDECBX ;BX自动减1JNZDSLRETDISPLAY ENDPCODEENDSENDSTART2分支程序设计实验接收键盘输入字符,将其中的小写字母转换为大写字母并显示。

汇编打字程序完整代码

汇编打字程序完整代码

汇编打字程序完整代码已经经过测试,可以直接使用Init_game macro op1,op2,op3,op4,op5local nsmov cx,00hmov dh,op1mov dl,op2ns:mov ah,02h;设置光标位置mov bh,00h;页号为0int 10hpush cxmov ah,0ah;在当前光标位置写字符mov al,op3;al=字符的ascii码mov bh,00h;bh=页号bl=字符属性mov cx,01h;cx=写入字符重复次数int 10hpop cx;cx=0inc cx;cx=cx+1inc op4cmp cx,op5jne nsendmclear_screen macro op1,op2,op3,op4 ;清屏宏定义cx,屏幕的左上角,dx屏幕的右下角mov ah,06hmov al,00hmov bh,0ah;改变行属性的色彩,字的色彩,bh空白行的属性/07就是正常的黑底白字mov ch,op1mov cl,op2mov dh,op3mov dl,op4int 10hmov ah,02h;设置光标的位置从0000开始mov bh,00hmov dh,00hmov dl,00hint 10hendmmenu macro op1,op2,op3 ;菜单显示宏定义mov ah,02hmov bh,00hmov dl,op2int 10hmov ah,09hlea dx,op3int 21hendmdata segmentZK db "WELCOME TO PLAY!$"no db "date:2014/4/7 BY luozhilei QQ:1121364692 $"meg db "press Enter to start.......$"meg1 db "when a letter is dropping,please hit it!(just press the$ " meg2 db "dropping letter,so easy!)$"meg3 db "press space key to pause!repress space to continue!$" meg4 db "press ESC key to return main menu!$"meg5 db "press letter 'E' to exit!$"meg6 db "version 1.0","$"speed dw 600dletters_bak db "jwmilzoeucgpravskntxhdyqfb"db "iytpkwnxlsvxrmofzhgaebudjq"db "nwimzoexrphysfqtvdcgljukda"letters db 78d dup(0)letter_counter db 0life_flag db 78 dup(0)position_flag db 78 dup(0)present_position db 1data endsstack segment para stack 'stack'db 64 dup(0)stack endscode segmentmain proc farassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov letter_counter,00hmov present_position,1lea si,position_flag;mov ah,00hmov cx,00h------------------------------------lea di,letters;di的偏移地址为letterslea si,letters_bak;si的偏移地址为letter_bakmov cx,00h;cx=0mov ah,[si];ah=jmov [di],ah;ah的值放到letters里面;letters_bak的值放入letters里面inc si;si+1inc di;di+1inc cx;cx+1cmp cx,78d;jne init_letters;不为0就到init_letters,一直循环到letters里mov ah,00hlea si,life_flag;mov cx,00hover后,自动回去吧init_life_flag:mov [si],ahinc siinc cxcmp cx,78djne init_life_flag;-----------------------------------------------------------------------mov cx,00h ;ch=光标开始行,cl=光标结束行根据CX给出光标的大小mov ah,01hor ch,00010000b;ch>20h,光标消失,cl>20h,覆盖字符int 10hclear_screen 00d,00d,24d,79d ;清屏,0000- 2479Init_game 00d,00d,07h,dl,80d ;这个四个是初始化屏幕的上下左右的框框Init_game 24d,00d,07h,dl,80dInit_game 00d,00d,07h,dh,25dInit_game 00d,79d,07h,dh,25dmenu 05d,15d,ZK ;菜单信息的宏调用,这五行是在屏幕上显示提示消息menu 07h,15d,nomenu 09d,15d,megmenu 11d,15d,meg1menu 13d,10d,meg2menu 15d,15d,meg3menu 17d,15d,meg4menu 19d,15d,meg5menu 21d,15d,meg6put: mov ah,02h ;设置光标位置mov bh,00h;设置页码mov dh,22d;dx行列坐标mov dl,33dint 10hmov ah,01h ;从键盘输入任意字符并回显示,al=输入字符int 21hcmp al,0dh;是否为换行符je speed3;如果是换行符则跳转到speed3处cmp al,45h;比较是否为eje exit;如果为e,转到exitexit: mov ah,4chint 21hspeed3:mov ax,speed+12mov speed,axjmp beginbegin: clear_screen 01d,01d,23d,78d ;清屏宏调用; clear_screen 01d,01d,23d,78dInit_game 23d,01d,03h,dl,78d;23d01d行列坐标,初始化倒数第二行的字符mov ah,02hmov bh,00hmov dh,01hmov dl,01hint 10hmov cx,00hlea si,letters ;si的偏移地址是lettersnextletter:mov ah,02h ;显示字母mov dl,[si] ;把letters的字符放到dl里int 21h ;通过dos中断的2号功能项,把字符显示出来inc siinc cxcmp cx,78dje nextcycle;全部显示完了后,跳到nextcyclejmp nextletterfrom_front:sub present_position,78d ;当超过78个字时的处理方式减去78jmp gobackto_si;跑到gobackto_si这来find_zero:cmp letter_counter,78d ;letter_counter有78了,初始化je recycle;如果有跑到recyclecmp present_position,78d;如果present_position等于78d,je from_onemov ah,00hnextsi: add present_position,01hinc sicmp [si],ahje gobackto_dicmp present_position,78dje from_onejmp nextsifrom_one:mov present_position,01h ;present_position=01jmp gobackto_si;---------------------------------------------------------------------------------------recycle:mov letter_counter,00h;letter_counter=0mov present_position,01d;present_position=01lea si,position_flag;si=position_flag的偏移地址mov cx,00hmov ah,00hclearsi:mov [si],ah;position_flag地址搞成0inc cxcmp cx,78dje nextcycleinc sijmp clearsinextcycle:lea di,letters;di的偏移地址是letters[字母]lea si,position_flag;si的偏移地址是position_flagadd present_position,31d;31一跳,这个你可以随便设置cmp present_position,78d;;超过78个字节ja from_front;------------------------------------------------------------------------------------------------gobackto_si:add si,word ptr present_position;si=si+present_position,si向后偏移dec si; 要不要都无所谓,只不过,因为开始就觉定了是要31一跳,所以这里减一个1位mov ah,[si];把position_flag放到ah里cmp ah,01h;看看position_flag里面有没有标志1je find_zero;如果ah为1转移,否则gobackto_di:mov ah,01hmov [si],ahadd di,word ptr present_positiondec di;因为列坐标是从0开始,而字符是从1开始,所以这里是32-1mov dl,present_position;mov ah,02hmov bh,00hmov dh,01hint 10hmov cx,00h;------------------------------------------------------------------------------------------------------------------------nextrow: push cxmov cx,00hout_cycle: ; 延迟push cxmov cx,00hin_cycle:add cx,01hcmp cx,1000 ;jne in_cycle ;zf=0转到标号处执行,push dxmov ah,06h ;从键盘输入字符,al等于字符mov dl,0ffhint 21hpop dxjz passcmp al,1bh ;如果键入ESC,则返回主菜单je to_start1cmp al," " ;如果键入SPACE,则游戏暂停je pausecmp al,[di] ;输入字母正确!则字母消失je disappearpass: pop cxinc cxcmp cx,speedje printjmp out_cyclepause: push dx mov ah,06hmov dl,0ffhint 21hpop dxcmp al," "jne pausejmp passto_start1: ;返回主菜单jmp startprint:mov ah,0ah ;在当前光标位置写空格mov al," "mov bh,00hmov cx,01hint 10hinc dhmov ah,02h ;改变光标位置mov bh,00hmov ah,0ah ;在当前光标位置写字母mov al,[di]mov bh,00hmov cx,01hint 10hpop cxinc cxcmp cx,21dje print_next_letterjmp nextrow ;下一行disappear: ;击中字母后输出空格pop cxpop cxmov ah,0ah;在光标处按原来属性显示字符mov al," "mov bh,00hmov cx,01hint 10hjmp hitprint_next_letter:lea si,life_flagadd si,word ptr present_positiondec simov ah,0ah;在当前光标处按原有属性显示字符mov al," ";最倒数第二排写入字符,意思是当掉下来的字符到倒数第二行的时候,自动变成空格消失mov bh,00hmov cx,01hint 10hinc dh ;这就是到了最后一行mov ah,02hmov bh,00hint 10hmov ah,0ah;把最后一行的字符变成空格mov al," "mov bh,00hmov cx,01h;重复输出,这里的重复输出的意思就是输入一个空格int 10hmov ah,1;把life_flag变成1,这样下次就可以不在同一个位置掉字符下来mov [si],ahhit: mov ah,02h;设置光标mov bh,00hmov dh,01h;第一行mov dl,present_position;下一个字符的列mov al,[di] ; 出现下一个新字母的数法add al,7;di+7cmp al,7ah;z的ascii码就是7ah,所以当al大于7ah时转移ja convey_lettermov ah,0ah;在当前光标按原有属性显示字符,al=字符mov bh,00hmov cx,01hint 10hmov [di],aladd letter_counter,01h;统计次数jmp nextcycleconvey_letter:sub al,7ahadd al,61h;al等于要显示的字符,加61表示是小写字母mov ah,0ahmov bh,00hmov cx,01hint 10hmov [di],aladd letter_counter,01hjmp nextcycle ;没弄懂作者这里是什么意思,到了这里就jmp了那写下面的程序做屁clear_screen 01,01,23,78mov ah,02hmov bh,00hmov dh,11dmov dl,20dint 10hinc dhinc dhmov ah,02hmov bh,00hint 10hnotkey:mov ah,07hint 21hcmp al,0dhje to_startcmp al,1bhje overjmp notkeyto_start:clear_screen 00,00,24,79jmp startover: clear_screen 01,01,23,78 mov ah,02hmov bh,00hmov dh,11dmov dl,15hint 10hmov ah,02hmov bh,00hmov dh,13dmov dl,15hint 10hmov ah,07hint 21hmov ah,07hint 21hclear_screen 00,00,24,79 mov ax,4c00hint 21hmain endpcode endsend start。

常见汇编程序源代码示例

常见汇编程序源代码示例

包含14个常见的汇编程序源代码,所有代码在VC6.0中调试通过;汇编程序釆用《微机原理接口与技术》(钱晓婕)一书中所用的框架。

目录1.编写程序,计算下面函数的值并输出。

(2)2.输入一个年份(调用readuid子程序),判断是否是闰年 (2)3.输入三个无符号整数(调用readuid子程序),判断并输出这三个数是否能构成一个三角形的三条边。

若这三个数能构成一个三角形的三条边,输出三角形的形状:斜三角形、等腰三角形、等边三角形。

(3)4.采用无条件和条件转移指令构造while和do while循环结构,完成下面的求和任务并输出sum(sum为双字)。

(5)5.编写程序,求0到100间所有偶数和并输出。

要求采用loop、while# do while三种不同的循环结构完成。

(6)6.Fibonacci numbers 的定义: (8)fl=l,f2=l z fn= fn-1 + fn-2 n>=3 (8)编程输出Fibonacci numbers的前30 项。

(8)7.有一个首地址为array的20个有符号的双字数组,编程分别求出正数的和与负数的和并输出。

(10)8.有一个首地址为string的字符串,剔除string中所有的空格字符。

请从字符串最后一个字符开始逐个向前判断、并进行处理。

(12)9.有一个首地址为string的字符串,分别统计string中空格、英文字母、数字和其它字符的个数并输出。

(13)10.palindrome(回文)是指正读和反读都一样的数或文本。

例如:11、121. 12321 等,编写程序,求10到10000之间所有回文数并输出。

要求每行输出10个数。

1511.编写程序,求出所有满足勾股定理且边长不大于500的直角三角形。

.1712.编写一个求n!的子程序,利用它求1 !+2!+引+4!+5!+6!+7!+8!的和并输出。

2213.编写一个判断闰年的子程序,利用它求出2010年到2060年之间所有的闰年并输出。

51单片机常见汇编程序实验代码

51单片机常见汇编程序实验代码

51单片机常见汇编程序实验代码1. 将片外8000H-80FFH单元写入数据AB 32. 将片内RAM20H单元中数据在数码管上显示出来 (3)3. 将片内ARM30H-40H单元清零 54. 将六位数显示在数码管上 55. 8255并口芯片的应用:交通灯控制系统的设计 (6)6. 将交通灯点亮 (7)7. AD转换实验 (8)8. DA转换实验 (10)9. 定时器的应用 ·· 1110. 开关控制LED的亮灭及速度 1211. 计数器实验 (12)12. 串并转换实验 · 1413. 直流电机速度检测1514. 8255PB外接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式)17 15. P3.4接开关K,编程将开关拨动次数,通过串并转换的方式进行显示1816. 比较片内RAM30H、31H两个单元值的大小,将较大的数显示在数码管上1917. 单片机P1口接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式) (21)18. 将片内50H单元的值显示在数码管上2219. 开关K1接P1.0,K2接P1.1,编程实现当按下K1时在数码管上显示50H单元的值,按下K2在数码管上显示51H单元的值231. 将片外8000H-80FFH单元写入数据ABORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H; 避免堆栈和工作寄存器区冲突MOV DPTR,#8000HMOV R0,#0LOOP: MOV A,#0ABHMOVX @DPTR,AINC DPTRINC R0CJNE R0,#0,LOOP ; 判断AJMP $; 等待END ;调试-视图-M存储器(输入X:8000H)2. 将片内RAM20H单元中数据在数码管上显示出来ORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H ;避免堆栈和工作寄存器区冲突MOV DPTR,#0E100H ;指向命令口MOV A,#03H ;PA、PB口输出MOVX @DPTR,A ;所有并口显示程序先进行8155初始化MOV 20H,#34HMOV A,20HACALL CHAILOOP: MOV R0,#10H ;第一个显示数的送R0MOV R1,#2 ;显示2个数MOV R2,#1 ;从倒数第一个数码管开始显示ACALL DISPLAYLJMP LOOP ;判断CHAI: MOV B,#10HDIV ABMOV 10H,BMOV 11H,ARETDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND3. 将片内ARM30H-40H单元清零ORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H ;避免堆栈和工作寄存器区冲突MOV R0,#30HMOV A,#0LOOP: MOV @R0,AINC R0CJNE R0,#41H,LOOP ;判断AJMP $ ;等待END ;D:30H4. 将六位数显示在数码管上ORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H ;避免堆栈和工作寄存器区冲突MOV DPTR,#0E100H ;指向命令口MOV A,#03H ;PA、PB口输出MOVX @DPTR,A ;所有并口显示程序先进行8155初始化LOOP: MOV R0,#10H ;第一个显示数的送R0MOV 10H,#0HMOV 11H,#3HMOV 12H,#1HMOV 13H,#2HMOV 14H,#1HMOV 15H,#1HMOV R1,#6 ;显示6个数MOV R2,#1 ;从倒数第一个数码管开始显示ACALL DISPLAYLJMP LOOPDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND5. 8255并口芯片的应用:交通灯控制系统的设计ORG 0000HAJMP STARTORG 0030HSTART: MOV DPTR,#0AC03HMOV A,#80HMOVX @DPTR,A //8155初始化(所有并口显示中都要先8155初始化)MOV R5,#0F0HACALL DENGMOV R1,#20ACALL DELAYMOV R0,#1LOOP01: MOV R5,#5AHACALL DENGMOV R1,#100ACALL DELAYDJNZ R0,LOOP01MOV R0,#3 // LED_2闪烁次数LOOP02: MOV R5, #0FAHACALL DENGMOV R1,#10ACALL DELAYMOV R5,#50HACALL DENGMOV R1,#10ACALL DELAYDJNZ R0,LOOP02MOV R5,#0A5HACALL DENGMOV R1,#100ACALL DELAYMOV R0,#3LOOP03: MOV R5, #0F5HACALL DENGMOV R1,#10ACALL DELAYMOV R5,#0A0HACALL DENGMOV R1,#10ACALL DELAYDJNZ R0,LOOP03AJMP LOOP01DENG: MOV DPTR,#0AC00H //8155 PA口输出MOV A,R5MOVX @DPTR,A //8155 PA口送出显示参数RET //100ms延时子程序DELAY: MOV R7,#200DEL: MOV R6,#229DJNZ R6,$DJNZ R7,DELDJNZ R1,DELAYRETEND6. 将交通灯点亮ORG 0000HAJMP STARTORG 0030HSTART: MOV DPTR,#0AC03HMOV A,#80HMOV DPTR,#0AC00HMOV A,#05AHMOVX @DPTR,AAJMP $END7. AD转换实验ORG 0000AJMP STARTORG 000BHAJMP INT_0ORG 0030H START: MOV SP,#60HMOV TMOD,#01HMOV TH0,#4BHMOV TL0,#0FDHMOV R4,#2SETB EASETB ET0SETB TR0MOV DPTR,#0E100HMOV A,#3MOVX @DPTR,AMOV 22H,#9MOV 23H,#0MOV 24H,#8MOV 25H,#0 LOOP: MOV R0,#20HMOV R1,#6MOV R2,#1ACALL DISPLAYSJMP LOOPINT_0: MOV TH0,#4BHMOV TL0,#0FDHDJNZ R4,EXITPUSH ACCPUSH DPHPUSH DPLMOV DPTR,#0A000HMOVX A,@DPTRMOV B,#10HDIV ABMOV 21H,AMOVX @DPTR,AMOV R4,#2POP DPLPOP DPHPOP ACCEXIT: RETIDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND8. DA转换实验ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV A,#0LOOP1: MOV DPTR,#0B000HMOVX @DPTR,AACALL XSACALL DELAYINC ACJNE A,#0FFH,LOOP1LOOP2: MOV DPTR,#0B000HMOVX @DPTR,AACALL XSACALL DELAYDEC ACJNE A,#0,LOOP2SJMP LOOP1XS: PUSH ACCMOV DPTR,#TABMOV B,#51DIV ABMOV R1,AXCH A,BMOV B,#5DIV ABMOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,R1MOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,#0CLR CMOV R4,#16ACALL S164POP ACCRETS164: RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R4,S164RETDELAY: MOV R7,#200DEl: MOV R6,#229DJNZ R6,$DJNZ R7,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND9. 定时器的应用ORG 0000HAJMP STARTORG 00BHAJMP INT_0ORG 0030HSTART: MOV TMOD,#01HMOV TH0,#4BHMOV TL0,#0FDHMOV R0,#20MOV R1,#0SETB ET0SETB TR0SETB EAAJMP $INT_0: MOV TH0,#4BHMOV TL0,#0FDHDJNZ R0,EXITMOV R0,#20MOV A,R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P1,AINC R1CJNE R1,#8,EXITMOV R1,#0EXIT: RETITAB: DB 0FFH,0FAH,0F5H,0AFH,05FH,0AAH,55H,0H,0FFH END10. 开关控制LED的亮灭及速度ORG 0000H ;程序从0000H开始执行AJMP START ;跳转到主程序ORG 0030H ;以免覆盖中断START: MOV R4,#1 ;立即数传送到累加器LOOP: CLR P3.3 ;进位标志位清零LOOP1: JNB P3.5,LOOP ;直接寻址位为0则转移JB P3.4,LOOP2 ;直接寻址位为1则转移JNB P3.4,$INC R4 ;寄存器增1LOOP2: CPL P3.3 ;累加器求反MOV A,R4 ;寄存器内容传送到累加器AMOV R5,A ;累加器内容传送到累加器ACALL DELAY ;调用延时函数AJMP LOOP1 ;循环DELAY: MOV R6,#200DEL: MOV R7,#229DJNZ R7,$DJNZ R6,DEL ;寄存器减1,不为0则转移DJNZ R5,DELAYRET ;子程序返回END11. 计数器实验ORG 0000SJMP STARTORG 001BHLJMP INT_1START: MOV SP,#60HMOV R5,#20MOV TMOD,#15HMOV TH1,#4BHMOV TL1,#0FDHMOV TH0,#0MOV TL0,#0SETB ET1SETB EASETB TR1SETB TR0MOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV R0,#50H;MOV R1,#4LCALL DISPLAYSJMP LOOPINT_1: MOV TH1,#4BHMOV TL1,#0FDHDJNZ R5,CONMOV R5,#20PUSH ACCPUSH BMOV A,TL0MOV B,#10HDIV ABMOV 50H,BMOV 51H,AMOV A,TH0MOV B,#10HDIV ABMOV 52H,BMOV 53H,AMOV TH0,#0MOV TL0,#0POP BPOP ACCCON: RETIDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTR P164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,ADJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND12. 串并转换实验ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV R1,#0MOV DPTR,#TABLOOP: MOV A,#0CLR CMOV R4,#24ACALL S164MOV A,R1MOVC A,@A+DPTRMOV R4,#8ACALL S164INC R1MOV R5,#10ACALL DELAYCJNE R1,#10,EXITMOV R1,#0EXIT: SJMP LOOPS164: RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R4,S164RETDELAY: MOV R6,#200DEL: MOV R7,#230DJNZ R7,$DJNZ R6,DELDJNZ R5,DELAYRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H END13. 直流电机速度检测ORG 0000HAJMP MAINORG 001BHAJMP INT_1ORG 0030HMAIN: MOV SP,#60HMOV TMOD,#15HMOV TH1,#4BHMOV TL1,#0FDHMOV R0,#20MOV TH0,#0MOV TL0,#0SETB ET1SETB EASETB TR0SETB TR1MOV R2,#00HUP: MOV A,R2MOV DPTR,#0A000H //注意片选接YC2,非YC3MOVX @DPTR,AMOV R5,#1ACALL DELAY ;100msINC R2CJNE R2,#0FFH,UPDOWN:MOV A,R2MOV DPTR,#0A000HMOVX @DPTR,AMOV R5,#1ACALL DELAY ;100msDEC R2CJNE R2,#00H,DOWNAJMP UPINT_1: MOV TH1,#4BHMOV TL1,#0FDHDJNZ R0,EXITMOV R0,#20PUSH ACCPUSH DPHPUSH DPLMOV A,TL0ACALL XSMOV TL0,#0MOV A,TH0ACALL XSMOV TH0,#0POP DPLPOP DPHPOP ACCEXIT: RETIXS: MOV DPTR,#TAB;MOV A,R2MOV B,#10 ;显示10进制数DIV ABXCH A,B;MOV DPTR,#TABMOVC A,@A+DPTRACALL FSXCH A,B;MOV DPTR,#TABMOVC A,@A+DPTRACALL FSRETFS: MOV R1,#8YW:RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R1,YWRETDELAY:MOV R6,#200DEL:MOV R7,#230DJNZ R7,$DJNZ R6,DELDJNZ R5,DELAYRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND14. 8255PB外接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式)ORG 0000AJMP STARTORG 0030HSTART: MOV DPTR,#0AC03HMOV A, #82HMOVX @DPTR, AMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV DPTR,#0AC01HMOVX A,@DPTRMOV B,#10HDIV ABMOV 10H,BMOV 11H,AMOV R0,#10HMOV R1,#2MOV R2,#1ACALL DISPLAYSJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,ADJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND15. P3.4接开关K,编程将开关拨动次数,通过串并转换的方式进行显示ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV R5,#0LOOP: JB P3.4,$ACALL DELAYJB P3.4,LOOPINC R5ACALL XSLOOP1: JNB P3.4,$ACALL DELAYJNB P3.4,LOOP1INC R5ACALL XSSJMP LOOPDELAY: MOV R7,#200DEL: MOV R6,#229DJNZ R6,$DJNZ R7,DELRETXS: MOV DPTR,#TABMOV A,R5MOV B,#10HMOV R1,AMOV A,BMOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,R1MOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,#0CLR CMOV R4,#16ACALL S164RETS164: RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R4,S164RETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND16. 比较片内RAM30H、31H两个单元值的大小,将较大的数显示在数码管上ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,AMOV 30H,#06H ;随便赋两个值,显示较大的MOV 31H,#11HMOV A,30HSUBB A,31HJC SMALLMOV B,#10HMOV A,30HDIV ABMOV 30H,BMOV 31H,ABIG: MOV R0,#30HMOV R1,#2MOV R2,#1ACALL DISPLAYSJMP BIG SMALL: MOV B,#10HMOV A,31HDIV ABMOV 30H,BMOV 31H,ASMALL1:MOV R0,#30HMOV R1,#2MOV R2,#1ACALL DISPLAYSJMP SMALL1 DISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTR P164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND17. 单片机P1口接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式)ORG 0000HSJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV A,P1MOV B,#10HDIV ABMOV 20H,BMOV 21H,AMOV R0,#20HMOV R1,#2MOV R2,#1ACALL DISPLAYAJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND18. 将片内50H单元的值显示在数码管上ORG 0000HSJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV A,P1MOV B,#10HDIV ABMOV 20H,BMOV 21H,AMOV R0,#20HMOV R1,#2MOV R2,#1ACALL DISPLAYAJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND19. 开关K1接P1.0,K2接P1.1,编程实现当按下K1时在数码管上显示50H单元的值,按下K2在数码管上显示51H单元的值ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,AMOV 50H,#18H ;50H,51H 随便赋两个值MOV 51H,#22HLOOP:JB P1.0,D50JB P1.1,D51SJMP LOOPD51: MOV R0,#10HMOV R1,#2MOV R2,#1MOV A,51HMOV B,#10HDIV ABMOV 10H,BMOV 11H,AACALL DISPLAYSJMP LOOPD50: MOV R0,#10HMOV R1,#2MOV R2,#1MOV A,50HMOV B,#10HDIV ABMOV 10H,BMOV 11H,AACALL DISPLAYSJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164:MOV DPTR,#TABMOVC A,@A+DPTRP164_1:RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT:MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY:MOV R6,#4DEL:MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND。

汇编语言程序代码

汇编语言程序代码

MOV(MOVe)传送指令PUSH 入栈指令POP 出栈指令XCHG(eXCHanG)交换指令XLAT(TRANSLATE)换码指令LEA (Load Effective Address)有效地址送寄存器指令LDS(Load DS with pointer)指针送寄存器和DS指令LES(Load ES with pointer)指针送寄存器和ES指令LAHF(Load AH with Flags)标志位送AH指令SAHF(Store AH into Flgs) AH送标志寄存器指令PUSHF(PUSH the Flags)标志进栈指令POPF(POP the Flags)标志出栈指令ADD 加法指令ADC 带进位加法指令INC 加1指令SUB(SUBtract)不带借位的减法指令SBB(SuVtrach with borrow)带借位的减法指令DEC(DECrement)减1指领NEG(NEGate)求补指令CMP(CoMPare)比较指令MUL(unsinged MULtiple)无符号数乘法指令IMUL(sIgned MUL tiple)有符号数乘法指令DIV(unsigned DIVide)无符号数除法指令IDIV(sIgned DIVide)有符号数除法指令CBW(Count Byte to Word)字节转换为字指令CWD(Count Word to Doble word)字转换为双字指令DAA 压缩的BCD码加法十进制调整指令DAS 压缩的BCD码减法十进制调整指令AAA 非压缩的BCD码加法十进制调整指令AAS 非压缩的BCD码加法十进制调整指令AND 逻辑与指令OR 逻辑或指令XOR 逻辑异或指令NOT 逻辑非指令TEST 测试指令SHL(SHift logical Letf)逻辑左移指令SHR(SHift logical Right)逻辑右移指令ROL(Rotate Left )循环左移指令ROR(Rotate Right)循环右移指令RCL(Rotate Left through Carry)带进位循环左移RCR(Rotate Right through Carry)带进位循环左移MOVS(MOVe String)串传送指令STOS(STOre into String)存入串指令LODS(LOad from string)从串取指令REP(REPeat)重复操作前缀P61CLD(CLear Direction flag)清除方向标志指令STD(SeT Direction flag)设置方向标志指令CMPS(CoMPare String)串比较指令SCAS(SCAn String)串扫描指令REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀IN(INput)输入指令OUT(OUTput)输出指令JMP(JuMP)无条件转移指令JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令LOOP 循环指令LOOPZ/LOOPE 为零/相等时循环指令LOOPNZ/LOOPNE 不为零/不相等时循环指令CALL 子程序调用指令RET(RETun)子程序返回指令CLC(CLear Carry)进位位置0指令CMC(CoMplement Carry)进位位求反指令SRC(SeT Carry)进位位置1指令NOP(No OPeretion)无操作指令HLT(HaLT)停机指令OFFSET 返回偏移地址SEG 返回段地址EQU(=)等值语句PURGE 解除语句DUP 操作数字段用复制操作符SEGMENT,ENDS 段定义指令ASSUME 段地址分配指令ORG 起始偏移地址设置指令$ 地址计数器的当前值PROC,ENDP 过程定义语句NAME,TITLE,END 程序开始结束语句MACRO,ENDM 宏定义指令P99。

汇编语言代码例子

汇编语言代码例子

汇编语言代码例子在计算机编程中,汇编语言是一种低级语言,它以机器指令的形式直接操作计算机硬件。

汇编语言具有直接控制硬件、效率高、功能强大等优点,因此在一些系统级编程、驱动开发以及性能优化领域得到广泛应用。

本文将介绍一些汇编语言的代码例子,以帮助读者更好地理解和学习汇编语言。

一、Hello World程序我们先从一个经典的汇编语言例子开始:Hello World程序。

这个程序会在屏幕上显示"Hello, World!"。

```section .data ; 数据段msg db 'Hello, World!', 0 ; 定义一个字符串并以0结尾section .text ; 代码段global _start_start:; 将字符串地址存入寄存器ebxmov ebx, msg; 将字符串长度存入寄存器ecxmov ecx, len; 系统调用号存入寄存器eaxmov eax, 4; 系统调用int 0x80; 程序退出mov eax, 1xor ebx, ebxint 0x80```在这段代码中,`.data` 表示数据段,我们定义了一个字符串`msg`,用来存储要显示的内容。

`.text` 表示代码段,`_start` 是程序的入口点。

程序首先使用 `mov` 指令将字符串的地址存入寄存器 `ebx`,将字符串的长度存入寄存器 `ecx`。

然后使用 `mov` 指令将系统调用号 `4`(表示写入)存入寄存器 `eax`。

接着,使用 `int 0x80` 进行系统调用,将字符串显示在屏幕上。

最后,使用 `mov` 指令将 `1` 存入寄存器 `eax`,表示程序退出。

`xor` 指令用于将寄存器 `ebx` 的值清零,然后再次使用 `int 0x80` 进行系统调用,程序结束。

二、求和程序下面是一个汇编语言的代码例子,用来计算从1到n的所有整数的和。

```section .data ; 数据段n db 10 ; 要计算的整数范围section .text ; 代码段global _start_start:mov eax, 0 ; 将寄存器eax清零,用于存放求和结果xor ecx, ecx ; 将寄存器ecx清零,用于循环计数mov cl, [n] ; 将要计算的整数范围读入寄存器ecxloop_start:add eax, ecx ; 将寄存器ecx的值加到寄存器eax中loop loop_start ; 循环条件减1,如果ecx ≠ 0,则跳转到loop_start; 程序退出mov eax, 1xor ebx, ebxint 0x80```在这段代码中,`.data` 段中定义了一个变量 `n`,表示要计算的整数范围。

单片机流水灯汇编语言源代码大全(六款流水灯汇编语言源代码)

单片机流水灯汇编语言源代码大全(六款流水灯汇编语言源代码)
源代码:
ORG 0
MOV R1,#3
LOOP1:MOV R0,#8
MOV A,#11111110B
LOOP2:MOV P0,A
RL A
CALL D200MS
DJNZ R0,LOOP2
DJNZ R1,LOOP1
MOV A,#00000000B
MOV P0,A
MOV P2,#0FFH
LOOP:MOV A,P2
ORG 0000H
JMP main
ORG 0003H
JMP int_0
main:
SETB IT0
SETB EX0
SETB EA
MOV A,#11111110B
s:RL A
MOV P2,A
CALL delay
JMP s
delay:
MOV R7,#100
d3:MOV R6,#200
d2:MOV R5,#250
ORG 0000H
MOV R0,#11111110B
start:MOV A,#11111110B
MOV P2,A
s:CALL delay
RL A
MOV P2,A
CALL delay
CJNE A,#01111111B,s
MOV A,R0
MOV P1,A
RL A
MOV R0,A
JMP start
delay:MOV R5,#100
CPL A
MOV P0,A
JMP LOOP
D200MS:
MOV R7,#250
D1:MOV R6,#200
D2:MOV R5,#2
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1

编程代码大全

编程代码大全

数控编程代码大全1、FANUC车床G代码G02顺时针切圆弧 (CW,顺时钟)G03逆时针切圆弧 (CCW,逆时钟)G04暂停 (Dwell)G09停于精确的位置G20英制输入G21公制输入G22内部行程限位有效G23内部行程限位无效G27检查参考点返回G28参考点返回G29从参考点返回G30回到第二参考点G32切螺纹G40取消刀尖半径偏置G41刀尖半径偏置 (左侧)G42刀尖半径偏置 (右侧)G50修改工件坐标;设置主轴最大的 RPMG52设置局部坐标系G53选择机床坐标系G70精加工循环G71内外径粗切循环G72台阶粗切循环G73成形重复循环G74Z 向步进钻削G75X 向切槽G76切螺纹循环G80取消固定循环G83钻孔循环G84攻丝循环G85正面镗孔循环G87侧面钻孔循环G88侧面攻丝循环G89侧面镗孔循环G90(内外直径)切削循环G92切螺纹循环G94(台阶) 切削循环G96恒线速度控制G97恒线速度控制取消G98每分钟进给率G99每转进给率支持宏程序编程G00顶位 (快速移动)定位 (快速移动) G01直线切削G02顺时针切圆弧G03逆时针切圆弧G04暂停G15/G16极坐标指令G17XY 面赋值G18XZ 面赋值G19YZ 面赋值G28机床返回原点G30机床返回第2和第3原点*G40取消刀具直径偏移G41刀具直径左偏移G42刀具直径右偏移*G43刀具长度 + 方向偏移*G44刀具长度 - 方向偏移G49取消刀具长度偏移*G53机床坐标系选择G54工件坐标系1选择G55工件坐标系2选择G56工件坐标系3选择G57工件坐标系4选择G58工件坐标系5选择G59工件坐标系6选择G73高速深孔钻削循环G74左螺旋切削循环G76精镗孔循环*G80取消固定循环G81中心钻循环G82反镗孔循环G83深孔钻削循环G84右螺旋切削循环G85镗孔循环G86镗孔循环G87反向镗孔循环G88镗孔循环G89镗孔循环*G90使用绝对值命令G91使用增量值命令G92设置工件坐标系*G98固定循环返回起始点*G99返回固定循环R点G50比例缩放G51G68坐标系旋转G69支持宏程序编程3.FANUC M指令代码M00程序停M01选择停止M02程序结束(复位)M03主轴正转 (CW)M04主轴反转 (CCW)M05主轴停M06换刀M08切削液开M09切削液关M30程序结束(复位) 并回到开头M48主轴过载取消不起作用M49主轴过载取消起作用M94镜象取消M95X坐标镜象M96Y坐标镜象M98子程序调用M99子程序结束4.SIEMENS铣床G代码D刀具刀补号F进给率(与G4 一起可以编程停留时间) GG功能(准备功能字)G0快速移动G1直线插补G2顺时针圆弧插补G3逆时针圆弧插补CIP中间点圆弧插补G33恒螺距的螺纹切削G331不带补偿夹具切削内螺纹G332不带补偿夹具切削内螺纹. 退刀CT带切线的过渡圆弧插补G4快速移动G63快速移动G74回参考点G75回固定点G25主轴转速下限G26主轴转速上限G110极点尺寸,相对于上次编程的设定位置G110极点尺寸,相对于当前工件坐标系的零点G120极点尺寸,相对于上次有效的极点G17*X/Y平面G18Z/X平面G19Y/Z平面G40刀尖半径补偿方式的取消G41调用刀尖半径补偿, 刀具在轮廓左侧移动G42调用刀尖半径补偿, 刀具在轮廓右侧移动G500取消可设定零点偏置G54第一可设定零点偏置G55第二可设定零点偏置G56第三可设定零点偏置G57第四可设定零点偏置G58第五可设定零点偏置G59第六可设定零点偏置G53按程序段方式取消可设定零点偏置G60*准确定位G70英制尺寸G71*公制尺寸G700英制尺寸,也用于进给率FG710公制尺寸,也用于进给率FG90*绝对尺寸G91增量尺寸G94*进给率F,单位毫米/分G95主轴进给率F,单位毫米/转G901在圆弧段进给补偿“开”G900进给补偿“关”G450圆弧过渡G451等距线的交点I插补参数J插补参数K插补参数I1圆弧插补的中间点J1圆弧插补的中间点K1圆弧插补的中间点L子程序名及子程序调用M辅助功能M0程序停止M1程序有条件停止M2程序结束M3主轴顺时针旋转M4主轴逆时针旋转M5主轴停M6更换刀具N副程序段:主程序段P子程序调用次数RET子程序结束S主轴转速,在G4 中表示暂停时间T刀具号X坐标轴Y坐标轴Z坐标轴CALL循环调用CHF倒角,一般使用CHR倒角轮廓连线CR圆弧插补半径GOTOB向后跳转指令GOTOF向前跳转指令RND圆角支持参数编程6.SIEMENS车床G 代码D刀具刀补号FF进给率(与G4 一起可以编程停留时间) GG功能(准备功能字)G0快速移动G1直线插补G2顺时针圆弧插补G3逆时针园弧插补G33恒螺距的螺纹切削G4快速移动G63快速移动G74回参考点G75回固定点G17(在加工中心孔时要求)G18*Z/X平面G40刀尖半径补偿方式的取消G41调用刀尖半径补偿, 刀具在轮廓左侧移动G42调用刀尖半径补偿, 刀具在轮廓右侧移动G500取消可设定零点偏置G54第一可设定零点偏置G55第二可设定零点偏置G56第三可设定零点偏置G57第四可设定零点偏置G58第五可设定零点偏置G59第六可设定零点偏置G53按程序段方式取消可设定零点偏置G70英制尺寸G71*公制尺寸G90*绝对尺寸G91增量尺寸G94*进给率F,单位毫米/分G95主轴进给率F,单位毫米/转I插补参数I1圆弧插补的中间点K1圆弧插补的中间点L子程序名及子程序调用M辅助功能M0程序停止M1程序有条件停止M2程序结束M30M17M3主轴顺时针旋转M4主轴逆时针旋转M5主轴停M6更换刀具N副程序段:主程序段P子程序调用次数RET子程序结束S主轴转速,在G4 中表示暂停时间T刀具号X坐标轴Y坐标轴Z坐标轴AR圆弧插补张角CALL循环调用CHF倒角,一般使用CHR倒角轮廓连线CR圆弧插补半径GOTOB向后跳转指令GOTOF向前跳转指令RND圆角支持参数编程G00定位 (快速移动)G01直线切削G02顺时针切圆弧 (CW,顺时钟) G03逆时针切圆弧 (CCW,逆时钟) G04暂停 (Dwell)G09停于精确的位置G20英制输入G21公制输入G22内部行程限位有效G23内部行程限位无效G27检查参考点返回G28参考点返回G29从参考点返回G30回到第二参考点G32切螺纹G36直径编程G37半径编程G40取消刀尖半径偏置G41刀尖半径偏置 (左侧)G42刀尖半径偏置 (右侧)G53直接机床坐标系编程G54—G59坐标系选择G71内外径粗切循环G72台阶粗切循环G73闭环车削复合循环G76切螺纹循环G80内外径切削循环G81端面车削固定循环G82螺纹切削固定循环G90绝对值编程G91增量值编程G92工件坐标系设定G96恒线速度控制G97恒线速度控制取消G94每分钟进给率G95每转进给率支持参数与宏编程*G001定位 (快速移动)G01直线切削G02顺时针切圆弧G03逆时针切圆弧G040暂停G0716虚轴指定G090准停校验*G172XY 面赋值G18XZ 面赋值G19YZ 面赋值G208英寸输入*G21毫米输入G22脉冲当量G243镜像开*G25镜像关G280返回到参考点G29由参考点返回*G407取消刀具直径偏移G41刀具直径左偏移G42刀具直径右偏移G438刀具长度 + 方向偏移G44刀具长度 - 方向偏移*G49取消刀具长度偏移*G504缩放关G51缩放开G520局部坐标系设定G53直接机床坐标系编程*G5414工件坐标系1选择G55工件坐标系2选择G56工件坐标系3选择G57工件坐标系4选择G58工件坐标系5选择G59工件坐标系6选择G600单方向定位*G6112精确停止校验方式G64连续方式G685旋转变换*G69旋转取消G739高速深孔钻削循环G74左螺旋切削循环G76精镗孔循环*G80取消固定循环G81中心钻循环G82反镗孔循环G83深孔钻削循环G84右螺旋切削循环G85镗孔循环G86镗孔循环G87反向镗孔循环G88镗孔循环G89镗孔循环*G903使用绝对值命令G91使用增量值命令G920设置工件坐标系*G9414每分钟进给G95每转进给*G9810固定循环返回起始点G99返回固定循环R点支持参数与宏编程10.HNC M指令M00程序停M01选择停止M02程序结束(复位)M03主轴正转 (CW)M04主轴反转 (CCW)M05主轴停M06换刀M07切削液开M09切削液关M98子程序调用M99子程序结束G001定位 (快速移动)G01直线切削G02顺时针切圆弧G03逆时针切圆弧G040暂停G172XY 面赋值G18XZ 面赋值G19YZ 面赋值G280机床返回原点G29从参考点返回*G407取消刀具直径偏移G41刀具直径左偏移G42刀具直径右偏移*G438刀具长度 + 方向偏移*G44刀具长度 - 方向偏移G49取消刀具长度偏移*G5314机床坐标系选择G54工件坐标系1选择G55工件坐标系2选择G56工件坐标系3选择G57工件坐标系4选择G58工件坐标系5选择G59工件坐标系6选择G739高速深孔钻削循环G74左螺旋切削循环G76精镗孔循环*G80取消固定循环G81钻孔循环〔点钻〕G82钻孔循环〔镗阶梯孔〕G83深孔钻削循环G84攻丝循环G85镗孔循环G86钻孔循环G87反向镗孔循环G88镗孔循环G89镗孔循环*G903使用绝对值命令G91使用增量值命令G920设置工件坐标系*G9810固定循环返回起始点*G99返回固定循环R点G001定位 (快速移动)G01直线切削G02顺时针切圆弧 (CW,顺时钟) G03逆时针切圆弧 (CCW,逆时钟) G040暂停 (Dwell)G10偏移值设定G206英制输入G21公制输入G270检查参考点返回G28参考点返回G29从参考点返回G31跳跃机能G321切螺纹G36X轴自动刀偏设定G37Z轴自动刀偏设定G407取消刀尖半径偏置G41刀尖半径偏置 (左侧)G42刀尖半径偏置 (右侧)G500坐标系设定G54工件坐标系G55---G59工件坐标系G700精加工循环G71内外径粗切循环G72台阶粗切循环G73成形重复循环G74端面深孔加工循环G75外圆、内圆切削循环G76切螺纹循环G901(内外直径)切削循环G92切螺纹循环G94(台阶) 切削循环G9612恒线速度控制G97恒线速度控制取消G985每分钟进给率G99每转进给率100 M指令M00程序停M01选择停止M02程序结束(复位)M03主轴正转 (CW)M04主轴反转 (CCW)M05主轴停M06换刀M08切削液开M09切削液关M10卡紧M11松开M32润滑开M33润滑关M98子程序调用M99子程序结束22.三菱E60 铣床G代码※G001位置定位 (快速进给)*G01直线补间G02顺时针切圆弧(CW)G03逆时针切圆弧(CCW)G04暂停G05高速加工模式G090正确停止检查G10程式参数输入/补正输入G11程式参数输入取消G12圆切削CWG13圆切削CCW*G172平面选择X-Y※G18平面选择Z-XG19平面选择Y-Z※G206 英制指令G21公制指令G270参考原点检查G28参考原点复归G29开始点复归G30第2~4参考原点复归G31跳跃机能G331螺纹切削G370自开工具长测定G38刀具径补正向量指定G39刀具径补正转角圆弧补正*G407刀具径补正取消G41刀具径补正左G42刀具径补正右G438刀具长补正量〔+〕G44刀具长补正量〔-〕*G49工具长补正量取消G520局部坐标系设定G53机械坐标系选择*G5412工件坐标系1选择G5512工件坐标系2选择G56工件坐标系3选择G57工件坐标系4选择G58工件坐标系5选择G59工件坐标系6选择G600单方向位置定位G6113工确停止检查模式G62自动转角进给率调整G63攻牙模式*G64切削模式G739固定循环〔步进循环〕G74固定循环〔反向攻牙〕G76固定循环〔精镗孔〕*G80固定循环取消G81固定循环〔钻孔/铅孔〕G82固定循环〔钻孔/计数式镗孔〕G83固定循环〔深钻孔〕G84固定循环〔攻牙〕G85固定循环〔镗孔〕G86固定循环〔镗孔〕G87固定循环〔反镗孔〕G88固定循环〔镗孔〕G89固定循环〔镗孔〕*G903绝对值指令*G91增量值指令G920机械坐标系设定G935逆时针进给*G94非同期切削〔每分钟进给〕*G95同期切削〔每回钻进给〕*G9617周速一定控制有效*G97周速一定控制无效*G9810固定循环起始点复归G99固定循环R点复归支持参数与宏编程G00快速定位G01直线插补G02顺时针圆弧插补G03逆时针圆弧插补G04延时G09进给准停G20独立子程序调用G22独立子程序定义G24独立子程序定义结束,返回调用程序G25跳转加工G26程序块调用加工程序内子程序调用G27无限循环G30倍率取消G31倍率定义G47短直线速度自动过渡G48取消G54~G59工件坐标系选择G71内外径切削复合循环G72端面切削复合循环G73封闭轮廓复合循环G74返回机床参考点〔机械原点〕G75返回对刀点G76返回加工开始点G77恢复当前坐标系G81外圆加工循环G82端面加工循环G85英制刚性攻丝循环G86公制螺纹加工循环G87英制螺纹加工循环G90绝对值方式编程G91增量值方式编程G92设置程序零点G96恒线速切削有效G97取消恒线速切削G98取消每转进给G99设定每转进给P= 参变量赋值M指令解释M01条件停M02程序结束并停机M03主轴正转M04主轴反转M05主轴停M06冷却开M07冷却关M08工件夹紧M09工件松开M10开指定的继电器M11关指定的继电器M20设定刀补号M21程序结束并返回程序开头M71~M85继电器脉冲输出G01直线插补G02顺时针圆弧插补或螺旋线插补G03逆时针圆弧插补或螺旋线插补G04延时G09伺服准停到位G11程序块沿Y轴镜像G12程序块沿X轴镜像G13程序块以原点镜像加工G17选择XOY平面G18选择XOZ平面G19选择YOZ平面G20子程序调用G22子程序定义G24子程序定义结束,返回调用程序G25跳转加工G26转移加工G27无限循环G30放大/缩小倍率取消G31放大/缩小倍率定义G40取消刀具半径补偿G41左刀具半径补偿G42右刀具半径补偿G43建立刀具长度补偿G44撤消刀具长度补偿G47短直线速度自动过渡G48取消短直线速度自动过渡G54~G59工件坐标系选择G73高速深孔加工循环G74返回机床参考点〔机械原点〕G75返回对刀点G76从当前位置返回程序零点G78精镗循环G81中心孔钻孔循环G82带停顿的中心钻孔循环G83深孔加工循环G84公制刚性攻丝循环G85英制刚性攻丝循环G86镗孔循环〔自动返回〕G87反镗循环G88镗孔循环〔手动返回〕G89带停顿的镗孔循环G90绝对值方式编程G91增量值方式编程G92设定工件座标系P= 参变量赋值M指令解释M00程序暂停M01L××(K××)M02程序结束并停机M03主轴正转M04主轴反转M05主轴停M08冷却开M09冷却关M10工件夹紧M11工件松开M20K××号继电器M21K××关××号继电器M30程序结束并返回程序开头M71~M85继电器脉冲输出。

汇编指令大全汇总

汇编指令大全汇总

一、数据传输指令1. 通用数据传送指令.MOV 传送字或字节.MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.POP把字弹出堆栈.PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP交换32位寄存器里字节的顺序XCHG交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD先交换再累加.( 结果在第一个操作数里) XLAT字节查表转换.──BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, )OUT I/O端口输出. ( 语法: OUT ,累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535.3. 目的地址传送指令.LEA装入有效地址.例: LEA DX,string;把偏移地址存到DX.LDS传送目标指针,把指针内容装入DS.例: LDS SI,string;把段地址:偏移地址存到DS:SI.LES传送目标指针,把指针内容装入ES.例: LES DI,string;把段地址:偏移地址存到ES:DI.LFS传送目标指针,把指针内容装入FS.例: LFS DI,string;把段地址:偏移地址存到FS:DI.LGS传送目标指针,把指针内容装入GS.例: LGS DI,string;把段地址:偏移地址存到GS:DI.LSS传送目标指针,把指针内容装入SS.例: LSS DI,string;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF标志寄存器传送,把标志装入AH.SAHF标志寄存器传送,把AH内容装入标志寄存器. PUSHF标志入栈. POPF标志出栈. PUSHD32位标志入栈. POPD32位标志出栈.二、算术运算指令───────────────────────────────────────ADD加法.ADC带进位加法.INC加1.AAA加法的ASCII码调整. DAA加法的十进制调整. SUB减法.SBB带借位减法.DEC减1. NEC求反(以0 减之).CMP比较.(两操作数作减法,仅修改标志位,不回送结果). AAS减法的ASCII码调整.DAS减法的十进制调整.MUL无符号乘法.IMUL整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算).AAM乘法的ASCII码调整.DIV无符号除法.IDIV整数除法.以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或商回送AX,余数回送DX, (字运算).AAD除法的ASCII码调整. CBW字节转换为字. (把AL中字节的符号扩展到AH 中去)CWD字转换为双字. (把AX中的字的符号扩展到DX 中去)CWDE字转换为双字. (把AX中的字符号扩展到EAX 中去)CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND与运算.OR或运算.XOR异或运算.NOT取反.TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL逻辑左移.SAL算术左移.(=SHL)SHR逻辑右移.SAR算术右移.(=SHR) ROL循环左移.ROR循环右移.RCL通过进位的循环左移.RCR通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码.如SHL AX,1. 移位>1次时, 则由寄存器CL给出移位次数. 如MOV CL,04SHL AX,CL四、串指令───────────────────────────────────────DS:SI源串段寄存器:源串变址. ES:DI目标串段寄存器:目标串变址. CX重复次数计数器.AL/AX扫描值. D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS串传送.( MOVSB传送字符. MOVSW传送字.MOVSD传送双字. )CMPS串比较.( CMPSB比较字符. CMPSW比较字. )SCAS串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS装入串.把源串中的元素(字或字节)逐一装入AL或AX中. ( LODSB传送字符.LODSW传送字.LODSD传送双字. )STOS保存串.是LODS的逆过程.REP当CX/ECX<>0时重复.REPE/REPZ当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ当ZF=0或比较结果不相等且CX/ECX<>0时重复.REPC当CF=1且CX/ECX<>0时重复. REPNC当CF=0且CX/ECX<>0时重复.五、程序转移指令───────────────────────────────────────1>无条件转移指令(长转移)JMP无条件转移指令CALL过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内) ( 当且仅当(SF XOR OF)=1时,OP1JA/JNBE不小于或不等于时转移.JAE/JNB大于或等于转移.JB/JNAE小于转移.JBE/JNA小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ等于转移.JNE/JNZ不等于时转移.JC有进位时转移.JNC无进位时转移.JNO不溢出时转移. JNP/JPO奇偶性为奇数时转移.JNS符号位为"0" 时转移.JO溢出转移.JP/JPE奇偶性为偶数时转移.JS符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环. LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT中断指令INTO溢出中断IRET中断返回5>处理器控制指令HLT处理器暂停, 直到出现中断或复位信号才继续.WAIT当芯片引线TEST为高电平时使CPU进入等待状态.ESC转换到外处理器.LOCK封锁总线.NOP空操作.STC置进位标志位.CLC清进位标志位. CMC进位标志取反. STD置方向标志位. CLD清方向标志位. STI置中断允许位. CLI清中断允许位.六、伪指令───────────────────────────────────────DW定义字(2字节). PROC定义过程. ENDP过程结束. SEGMENT定义段. ASSUME建立段寄存器寻址. ENDS段结束.END程序结束.第一、数据寄存器(Data Register)EAX 累加寄存器(accumulator), 常用于运算;用来存放操作数,所有的I/O指令用之与外界设备传送数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.顺序程序设计将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

DATA SEGMENTDATA1 DB 34H,35H,39H,38H,36H,' ' ;被加数DATA2 DB 37H,34H,33H,36H,32H,' ' ;加数DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,DATA1 ;有效地址送SI,为调用显示子程序做准备CALL DISPLAY ;调用显示子程序CALL CRLF ;调用回车换行子程序LEA SI,DATA2 ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备CALL DISPLAY ;调用显示子程序CALL CRLF ;调用回车换行子程序LEA DI,DATA1 ;有效抵制送DI,为加法运算做准备MOV AX,0MOV BX,0MOV CL,05H ;记录循环次数ADDS: MOV AL,[SI] ;将加数送往ALSUB AL,30HADD AL,BL ;加上进位MOV BL,[DI] ;将被加数送往BLSUB BL,30HADD AL,BL ;加法运算ADD AL,30HCMP AL,3AHJA SUBA ;结果>=10,跳到SUBAJB NSUBASUBA: SUB AL,0AH ;减去10的值,并置BL为1 MOV BL,01H JMP CONTINUENSUBA: MOV BL,00H ;置BL为0CONTINUE:MOV [DI],AL ;将相加的结果从AL送往DI的地址,即DATA1的地址INC DI ;地址加1INC SI ;地址加1LOOP ADDS ;循环JC SHUCHUJNC SHUCHU2SHUCHU2: MOV AL,31H ;CF为1设置结果最高位为1JMP CONTINUE2SHUCHU:MOV AL,30H ;CF为0设置结果最高位为0LEA SI,DATA1 ;将DATA1的有效地址送往SI,为调用DISPLAY子程序做准备 CALL DISPLAY ;调用DISPLAY子程序MOV AX,4C00H ;返回DOSINT 21HMAIN ENDPCRLF PROC NEAR ;回车、换行于功能MOV DL,0DHMOV AH,02H INT 21H MOV DL,0AHMOV AH,02H INT 21HRETCRLF ENDPDISPLAY PROC NEAR ;显示于功能MOV BX,0006H ;记录循环次数DSL: MOV DL,[SI+BX-1] ;将有效地址内的内容送往DLMOV AH,02 ;2号功能输出INT 21HDEC BX ;BX自动减1JNZ DSLRET DISPLAY ENDPCODE ENDSEND START2 分支程序设计实验接收键盘输入字符,将其中的小写字母转换为大写字母并显示。

CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART: MOV AH,00HINT 16HCMP AL,0DHJZ OVERCALL JUDGEMOV DL,ALMOV AH,02HINT 21HJMP STARTOVER: MOV AH,4CHINT 21HMAIN ENDPJUDGE PROC NEARCMP AL,'a'JB STOPCMP AL,'z'JA STOPSUB AL,20HSTOP: RETJUDGE ENDPCODE ENDSEND START3 循环程序设计实验统计一个有10人的班中,男、女生的人数各为多少。

将男生人数存入变量MAN、女生人数存入变量WOMAN中。

DATA SEGMENTMAN DB 0,0WOMAN DB 0,0STRING DB ' iuput people number! (man is 0, woman is 1 ) $'SM DB 'man is :$'SW DB 'woman is :$'DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,09H ;将STRING的内容输出MOV DX,OFFSET STRINGINT 21HCALL CRLFMOV CX,10 ;男女生总人数AA: MOV AH,01H ;从键盘输入,0为男,1为女INT 21HCMP AL,30H ;与'0'比较JNZ ADDW ;不为'0',女生人数加1INC MAN ;否则男生人数加1BB: LOOP AAJMP DISPLY ;打印ADDW: INC WOMANJMP BBDISPLY: CALL CRLFMOV AH,09H ;字符串输出MOV DX,OFFSET SMINT 21HMOV AH,02H ;男生人数统计结果输出ADD DL,30HCALL JUDGECALL CRLFMOV AH,09H ;字符串输出MOV DX,OFFSET SWINT 21HMOV AH,02H ;女生人数统计结果输出MOV DL,WOMANADD DL,30HCALL JUDGEMOV AH,4CH ;返回DOSINT 21HMAIN ENDPJUDGE PROC NEAR ;判断结果是否为39HCMP DL,3AHJZ SHICC: INT 21HRETSHI: MOV DL,31HINT 21HMOV DL,30HJMP CCJUDGE ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START4 子程序设计实验1.键盘输入字符,依次显示在行的最左端(即每接受一个字符,显示在屏幕上并回车换行。

)2.对频繁使用的回车换行编写为子程序,在主程序中调用完成分行显示。

CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART: MOV CX,10 ;设置循环次数NEXT: MOV AH,01H ;从键盘输入一个字符INT 21HCALL CRLF ;调用回车换行子程序MOV AH,4CH ;返回DOSINT 21HMAIN ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START5 码制转换程序实验将ASCⅡ码数据转换成二进制数据。

要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储。

DATA SEGMENTSTRING1 DB 'PLEASE INPUT A NUMBER(0~32767):$'STRING2 DB 'THE ASCII IS:$'STRING3 DB 'THE BINARY IS:$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1MOV AH,09HINT 21HCALL CRLFINPUT: MOV AH,01H ;输入数据INT 21HCMP AL,0DHJZ NEXTSUB AL,30HJL INPUTCMP AL,39HJG INPUTCBWXCHG AX,BX ;AX为输入值,BX保存结果,两个对调为MUL做准备MOV DX,10D ;将上一次结果乘10MUL DXXCHG AX,BX ;AX为本次输入的值,BX为之前的结果JMP INPUTNEXT: CALL CRLFMOV CL,4DMOV CH,4DMOV DX,OFFSET STRING2MOV AH,09HINT 21HCALL CRLFLOOP0: ROL BX,CL ;循环左移,将最高为存到BL的低四位 MOV AL,BLAND AL,0FH ;ADD AL,30HCMP AL,3AHJL OUTPUTADD AL,07HOUTPUT:MOV AH,02HMOV DL,ALINT 21HDEC CHJNZ LOOP0CALL CRLFMOV DX,OFFSET STRING3MOV AH,09HINT 21HCALL CRLFMOV CH,16DMOV CL,1DLOOP1: ROL BX,CLMOV AL,BLAND AL,01HADD AL,30HMOV AH,02HMOV DL,ALINT 21HDEC CHJNZ LOOP1MOV AH,4CHINT 21HMAIN ENDPOUTS PROC NEAR ;字符串输出子程序MOV AH,09HINT 21HRETOUTS ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车INT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START6 两个数相乘的实验实现十进制数的乘法,被乘数和乘数均以ASCⅡ码形式放在内存中,乘积在屏幕上显示出来。

DATA SEGMENTMBCS DW 0MCS DW 0RESULT DW 0STRING1 DB 'THE BEICHENGSHU IS:$'STRING2 DB 'THE CHENGSHU IS:$'STRING3 DB 'THE RESULT IS:$'STRING DB 'THE ASCII IS:$'DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1CALL OUTSCALL INPUT ;输入被乘数MOV DX,OFFSET STRINGCALL OUTSCALL CRLFCALL ASCII ;被乘数转化为ASCII码输出CALL CRLFMOV MBCS,BX ;被乘数保存到MBCS中MOV DX,OFFSET STRING2CALL OUTSCALL INPUT ;输入乘数MOV DX,OFFSET STRINGCALL OUTSCALL CRLFCALL ASCII ;乘数转化为ASCII码输出CALL CRLFMOV MCS,BX ;乘数保存到MCS中CALL OUTSCALL CRLFMOV AX,MBCS ;被乘数MUL BX ;乘数与被乘数相乘,结果高位DX,低位AXMOV RESULT,AX ;将AX中的内容保存到RESULT中MOV BX,DX ;将高位DX的值送给BX输出CALL ASCIIMOV BX,RESULT ;将低位AX的值送给BX输出CALL ASCIIMOV AH,4CHINT 21HMAIN ENDPINPUT PROC NEAR ;输入十进制数,将其转化为ASCII码存到BX中 CALL CRLFMOV BX,0AA: MOV AH,01HINT 21HCMP AL,0DHJZ STOPSUB AL,30HJL AACMP AL,39HJG AACBWXCHG AX,BX ;AX为输入值,BX保存结果,两个对调为MUL做准备 MOV DX,10D ;将上一次结果乘10MUL DXXCHG AX,BX ;AX为本次输入的值,BX为之前的结果ADD BX,AXJMP AASTOP: CALL CRLFRETINPUT ENDPASCII PROC NEARMOV CL,4DMOV CH,4DCC: ROL BX,CL ;循环左移,将最高为存到BL的低四位MOV AL,BLAND AL,0FH ;ADD AL,30HCMP AL,3AHJL BBADD AL,07HMOV DL,ALINT 21HDEC CHJNZ CCRETASCII ENDPOUTS PROC NEARMOV AH,09HINT 21HRETOUTS ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START7 从键盘输入数据并显示的程序编写程序将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

相关文档
最新文档