×

汇编语言实例100例 单片机汇编语言

汇编语言实例100例(哪里有单片机汇编语言例子)

admin admin 发表于2023-09-29 20:58:51 浏览43 评论0

抢沙发发表评论

本文目录

哪里有单片机汇编语言例子

我先发给你一个蜂鸣器的例子。你留下邮箱其余我发给你。 ;//****************************************************************;//*文件名:祝你平安MUSIC程序;//*创建人:巫升辉 ;//*2006.2.25 ;功能: INT1口接音频输出 一首祝你平安歌曲;接线:;//**************************************************************** ORG 0000H LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETISTART: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82HMUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MOV B,#00H ;表序号清0MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3MUSIC5: NOP MOV R6,A INC DPTR MOV A,B MOVC A,@A+DPTR ;取节拍代码送R7 MOV R7,A SETB TR0 ;启动计数MUSIC2: NOP CPL P3.3 ;音频输出端口 ;CPL P1.0 MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否? ;不等,则继续循环 MOV 20H,#00H ;等于,则取下一代码 INC DPTR LJMP MUSIC1MUSIC3: NOP CLR TR0 ;休止100毫秒 MOV R2,#0DHMUSIC4: NOP MOV R3,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1END0: NOP MOV R2,#64H ;歌曲结束,延时1秒后继续MUSIC6: MOV R3,#00H LCALL DEL DJNZ R2,MUSIC6 LJMP MUSIC0DEL: NOPDEL3: MOV R4,#02HDEL4: NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOPDAT:db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20hdb 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20hdb 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20hdb 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20hdb 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10hdb 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20hdb 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20hdb 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20hdb 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10hdb 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80hdb 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20hdb 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20hdb 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10hdb 20h,10h,2bh,10h,26h,30h,30h,80h,00HEND

求`2分`汇编语言程序实例`25行`后面要有解释!

第一份:用汇编语言对4位10进制数加密。密码是0123456789对应为9082746315。DATA SEGMENT TABLE DB 39H,30H,38H,32H,37H,34H,36H,33H,31H,35H;密码表 RESULT DB 4 DUP(?);四位十进制数对应的密码 DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA BX,TABLE LEA DI,RESULT MOV AX,1234;已知的四位十进制数,以下分别求四位十进制数位,并将密码存入RESULT中 MOV SI,1000 CALL NUMBER MOV SI,100 CALL NUMBER MOV SI,10 CALL NUMBER MOV SI,1 CALL NUMBER LEA DI,RESULT;在屏幕上依次显示四位加密后的十进制数 MOV CX,4 NEXT: MOV DL, cmp al,60 jb nextn cmp al,70 jnb next7 inc g6 jmp nextn next7: cmp al,80 jnb next8 inc g7 jmp nextn next8: cmp al,90 jnb next9 inc g8 jmp nextn next9: cmp al,100 jnb next10 inc g9 jmp nextn next10: jne nextn inc g10 nextn: inc si loop next mov ah,1 int 21h mov ax,4c00h int 21h code ends end start

汇编语言程序实例 1到100求和

有挑战,我喜欢! 我来试试!DATAS SEGMENT BuF DB 1,2,3,4,^^^^^^^,100 BuF2 DW ?DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV SI,OFFSET BuF MOV CL,100 MOV AX,0KK: ADC AX, INC SI LOOP KK MOV BuF2,AX MOV AH,4CH INT 21HCODES ENDS END START运行了,也是初学者,第二个语句可能有点问题,4和100之间加个省略号就行了!你试试吧!

100行的汇编语言程序

dat segmentdata db 10 dup(0)input db ’input:$’ output db ’output:$’enter db 0dh,0ah,’$’ dat endscod segment assume ds:dat,cs:cod;-----------------------主程序 start: mov ax,dat mov ds,ax ;数据段寄存器赋值 lea si,data ;SI指向DATA数组首单元 mov cl,4ppp: mov bx,0 ;BX清零 lea dx,input ;这三行调用INT 21H中断例程的9号功能输出DS:DX指向的字符串,以’$’结尾 mov ah,9 ;以下代码若有类似的三句,实现功能类似 int 21h ;显示输入提示 ;-----------------------开始输入十六进制数get: mov ah,1 ;这两行调用INT 21H中断例程1号功能,等待用户输入一个字符,保存入AL中 int 21h ;以下6对代码依次比较输入字符,并跳转到相应操作 cmp al,’*’ jz kkk ;输入’*’号,退出程序 cmp al,0dh ;0DH是回车键对应的字符 jz mess ;输入回车,跳出get循环(get循环:实现输入十六进制数并保存到BX的功能) cmp al,30h ;这4行判断是否是’0’~’9’ jb get cmp al,39h jbe num cmp al,’A’ ;这4行判断是否是’A’~’F’ jb get cmp al,’F’ jbe big cmp al,’a’ ;这4行判断是否是’a’~’f’ jb get cmp al,’f’ jbe big jmp get num: ;对数字进行处理 and al,0fh ;al高4位清零,保留低4位 jmp next big: ;对大写字母或者小写字母进行处理 sub al,7 and al,0fh next: shl bx,cl ;BX左移4位 add bl,al ;将数字保存到BL的低4位中 jmp get;----------------------- mess: lea dx,enter mov ah,9 int 21h ;回车、换行 lea dx,output mov ah,9 int 21h ;显示输出提示 mov dx,0 mov ax,bx mov bx,10 ;进制数again: call buf cmp ax,0 ;商如果为0,表示该十六进制数对应的十进制数的每一个数位的值都存入了DATA数组 jnz again mov ah,2 ;INT 21H的2号功能:将DL中保存的ASCII码对应的字符输出ttt: dec si mov dl,,dl mov dl,0 inc si retbuf endpcod ends end start;总结:这段程序实现的功能;1. 十六进制输入一个数,输入回车表示输入结束,输入’*’表示退出程序,保存到寄存器中;2. 十六进制数转换为十进制无符号数,使用了类似于栈的操作的方法;3. 十进制无符号数转换为对应字符的ASCII码(2和3由子程序buf完成);4. ASCII码对应字符的输出的功能

简单汇编语言实例

(1)判断双字的高位字是不是1,如果不是,直接返回(2)清除进位标志(3)将低字求反,然后 +1(4)将进位保存起来(5)将高位字求反,加上刚才的进位--------------XXXX: MOV AX, X + 1 ;取 X 的高位字 CMP AX, 32768 JB X_EXIT ;是正数就跳转 MOV AX, X ;取 X 的低位字 XOR AX, 0FFFFH ;取反 ADD AX, 1 PUSHF MOV X, AX MOV AX, X + 1 ;取X 的高位字 XOR AX, 0FFFFH ;取反 POPF ADC AX, 0 MOV X + 1, AXX_EXIT: RET

汇编语言的一些程序设计题,谁能举例解答一下

你的问题问的不对,寄存机 AX BX CX DX就是具体的数据,你可以把这些当成变量使用a,b,c,d在程序中是分配的内存空间,和寄存器存在着本质上的区别,所以这些题目使用的数据就是:AX,BX,CX,DX这些寄存器数据1、交换可以用堆栈进行,AX。BX相互交换内容PUSH AXPUSH BXPOP AXPOP BX这样AX和BX内容就交换了2、为了方便你理解,写一些不正确的表达式吧MOV AX,0 相当于 int a=0;XOR AX,AX XOR这个指令,如果后面两个数相同,则为0,并将0存放到第一个寄存器AX中SUB AX,AX 相当于 int a=1; a=a-a; 所以结果也是0AND AX,0 AND指令,将后面两个数据按位‘与’操作,只要有一个数为0,结果就为0,所以AX的结果就是0了。第三题看不懂什么意思,想问什么东西?4、内存复制的代码:mov si,offset setscreen;原数据偏移地址 mov di,0 ;目标偏移地址 mov cx,offset setscreen_end-offset setscreen ;计算出数据长度 cld ;di,si每次执行movsb的时候都递增1 rep movsb ;开始复制清零:如果数据段有一块内存需要清零mov cx,100; // 数据段长度mov si,0; // 开始地址mov al,0;_start: mov byte ptr ds:,al; dec cx; inc si; // 指向下一个字节 cmp cx,0; jnz _start; // 如果cx不为0事继续清空下一个内存百度【幽灵代码论坛】加入我们一起学习

汇编语言程序的汇编语言程序实例

用汇编语言对4位10进制数加密。密码是0123456789对应为9082746315。 DATA SEGMENT   TABLE DB 39H,30H,38H,32H,37H,34H,36H,33H,31H,35H;密码表 RESULT DB 4 DUP(?);四位十进制数对应的密码 DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA BX,TABLE LEA DI,RESULT MOV AX,1234;已知的四位十进制数,以下分别求四位十进制数位,并将密码存入RESULT中 MOV SI,1000 CALL NUMBER MOV SI,100 CALL NUMBER MOV SI,10 CALL NUMBER MOV SI,1 CALL NUMBER LEA DI,RESULT;在屏幕上依次显示四位加密后的十进制数 MOV CX,4 NEXT: MOV DL, MOV AH,2H INT 21H INC DI LOOP NEXT ;按任意键退出 mov ah,1 int 21h MOV AX,4C00H INT 21H MAIN ENDP NUMBER PROC NEAR MOV DX,0 DIV SI MOV SI,DX XLAT STOSB MOV AX,SI RET NUMBER ENDP CODE ENDS END MAIN.

用汇编语言编写计算100个正整数之和的程序!

;数据段count equ 100parray dw count dup(?);假设有100个数据wordsum dw 0msg db‘overflow’,’$’ ;代码段 mov cx,count mov ax,0 mov bx,offset parrayagain: add ax, jnc next mov dx,offset msg mov ah,9 int 21h ;显示溢出信息 jmp done ;然后,跳出循环体next: add bx,2 loop again mov wordsum,axdone:…

谁有51单片机编程实例集,汇编语言的,就是那些MOV MOVX这种的,690793119@qq.com 后面最好带解释的 谢谢

符号定义表 符号 含义Rn R0~R7寄存器n=0~7Direct 直接地址,内部数据区的地址RAM(00H~7FH)SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH)#data 8位常数#data16 16位常数Addr16 16位的目标地址Addr11 11位的目标地址Rel 相关地址bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位 指令介绍 指令 字节 周期 动作说明一、算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INC direct 2 1 将直接地址的内容加116.INC @Ri 1 1 将间接地址的内容加117.INC DPTR 1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC @Ri 1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整,若(A) 3-0》9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4》9或 (C)=1,则(A) 7-4←(A)7-4+6 二、逻辑运算指令25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器28.ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器34.ORL A,#data 2 1 将累加器的值与常数做OR的逻辑判断,结果存回累加器35.ORL direct,A 2 1 将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址36.ORL direct,#data 3 2 将直接地址的内容与常数值做OR的逻辑判断,结果存回该直接地址37.XRL A,Rn 1 1 将累加器的值与寄存器的值做XOR的逻辑判断,结果存回累加器38.XRL A,direct 2 1 将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器39.XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器40.XRL A,#data 2 1 将累加器的值与常数作XOR的逻辑判断,结果存回累加器41.XRL direct,A 2 1 将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址42.XRL direct,#data 3 2 将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址43.CLR A 1 1 清除累加器的值为044.CPL A 1 1 将累加器的值反相45.RL A 1 1 将累加器的值左移一位46.RLC A 1 1 将累加器含进位C左移一位47.RR A 1 1 将累加器的值右移一位48.RRC A 1 1 将累加器含进位C右移一位49.SWAP A 1 1 将累加器的高4位与低4位的内容交换。(A)3-0←(A)7-4数据转移指令50.MOV A,Rn 1 1 将寄存器的内容载入累加器51.MOV A,direct 2 1 将直接地址的内容载入累加器52.MOV A,@Ri 1 1 将间接地址的内容载入累加器53.MOV A,#data 2 1 将常数载入累加器54.MOV Rn,A 1 1 将累加器的内容载入寄存器55.MOV Rn,direct 2 2 将直接地址的内容载入寄存器56.MOV Rn,gdata 2 1 将常数载入寄存器57.MOV direct,A 2 1 将累加器的内容存入直接地址58.MOV direct,Rn 2 2 将寄存器的内容存入直接地址59.MOV direct1, direct2 3 2 将直接地址2的内容存入直接地址160.MOV direct,@Ri 2 2 将间接地址的内容存入直接地址61.MOV direct,#data 3 2 将常数存入直接地址62.MOV @Ri,A 1 1 将累加器的内容存入某间接地址63.MOV @Ri,direct 2 2 将直接地址的内容存入某间接地址64.MOV @Ri,#data 2 1 将常数存入某间接地址65.MOV DPTR,#data16 3 2 将16位的常数存入数据指针寄存器66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器 67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器68.MOVX A,@Ri 1 2 将间接地址所指定外部存储器的内容读入累加器(8位地址)69.MOVX A,@DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器(16位地址)70.MOVX @Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器(8位地址)71.MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所指定的外部存储器(16位地址)72.PUSH direct 2 2 将直接地址的内容压入堆栈区73.POP direct 2 2 从堆栈弹出该直接地址的内容74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换75.XCH A,direct 2 1 将累加器的值与直接地址的内容互换76.XCH A,@Ri 1 1 将累加器的值与间接地址的内容互换77.XCHD A,@Ri 1 1 将累加器的低4位与间接地址的低4位互换布尔代数运算 78.CLR C 1 1 清除进位C为079.CLR bit 2 1 清除直接地址的某位为080.SETB C 1 1 设定进位C为181.SETB bit 2 1 设定直接地址的某位为182.CPL C 1 1 将进位C的值反相83.CPL bit 2 1 将直接地址的某位值反相84.ANL C,bit 2 2 将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C85.ANL C,/bit 2 2 将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C86.ORL C,bit 2 2 将进位C与直接地址的某位做OR的逻辑判断,结果存回进位C87.ORL C,/bit 2 2 将进位C与直接地址的某位的反相值做OR的逻辑判断,结果存回进位C88.MOV C,bit 2 1 将直接地址的某位值存入进位C89.MOV bit,C 2 2 将进位C的值存入直接地址的某位90.JC rel 2 2 若进位C=1则跳至rel的相关地址91.JNC rel 2 2 若进位C=0则跳至rel的相关地址92.JB bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址93.JNB bit,rel 3 2 若直接地址的某位为0,则跳至rel的相关地址94.JBC bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0程序跳跃95.ACALL addr11 2 2 调用2K程序存储器范围内的子程序96.LCALL addr16 3 2 调用64K程序存储器范围内的子程序97.RET 1 2 从子程序返回98.RETI 1 2 从中断子程序返回99.AJMP addr11 2 2 绝对跳跃(2K内)100.LJMP addr16 3 2 长跳跃(64K内)101.SJMP rel 2 2 短跳跃(2K内)-128~+127字节102.JMP @A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址103.JZ rel 2 2 累加器的内容为0,则跳至rel所指相关地址104.JNZ rel 2 2 累加器的内容不为0,则跳至rel所指相关地址105.CJNE A,direct,rel 3 2 将累加器的内容与直接地址的内容比较,不相等则跳至rel所指的相关地址106.CJNE A,#data,rel 3 2 将累加器的内容与常数比较,若不相等则跳至rel所指的相关地址107.CJNE @Rn,#data,rel 3 2 将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址108.CJNE @Ri,#data,rel 3 2 将间接地址的内容与常数比较,若不相等则跳至rel所指的相关地址109.DJNZ Rn,rel 2 2 将寄存器的内容减1,不等于0则跳至rel所指的相关地址110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址111.NOP 1 1 无动作

单片机乘法和除法指令及汇编语言程序举例

1.乘法: MUL AB ;(A)×(B),积的低8位在A中,积的高8位在B中; C总为0。2.除法:DIV AB ;(A)÷(B),商在A中,余数在B中。 若(B)= 0 ,则结果不定,(OV)= 1,(C)= 0。 例、试将A中的二进制数转换为3位BCD码,其中,百位数存放于31H单 元,十位数和个位数压缩后存于30H单元中。解;MOV B,#100 DIV AB MOV 31H,A MOV A,#10 XCH A,B DIV AB SWAP A ADD A,BMOV 30H,A