org 0
jmp ww
org 30h
ww: mov a,#07fh
call ys
j1: mov p1,a
call ys
rr a
cjne a,#07fh,j1
mov p1,#0ffh
j2: mov p2,a
call ys
rr a
cjne a,#07fh,j2
mov p2,#0ffh
jmp ww
ys: mov r7,#255
y1: mov r6,#255
djnz r6,$
djnz r7,y1
ret
end希望对你有所帮助
解决这个问题,主要需要两方面的知识:
1、递归算法
虽然知道这个,但感觉头疼。Dididu1515 文刀舍予 这两位对递归是长项。
2、dos功能调用改变文件夹路径
总之,这个问题用16位汇编语言编程完全能够实现。
补充回答:看题目“遍历当前目录下以及子目录下的文件来找到所有txt属性的文件”,子目录下还可能有下级子目录,所以认为需要遍历。刚注意到,下面又说“当前目录下所有的txt文件”,不知楼主到底是要遍历当前目录下的所有子目录还是只在当前目录下找(不包含子目录)。若是后者,确如Dididu1515 所说,好办。
mov cx,16
xor bx,bx
@1: rol ax,1
jnc @2
inc bx
@2: loop @1
mov cx,bx
除8相当于右移三次就实现了,程序如下:
假设除数保存在30H31H,高位在前。
DIV8:
MOV
R2,#3
LOOP:
CLR
C
MOV
A,30H
RRC
A
;高位中的D0移到C
MOV
30H,A
MOV
A,31H
RRC
A
;C移到低位中的D7
MOV
A,31H
DJNZ
R2,LOOP
;移位三次
RET
1 用DEBUG编写程序,在屏幕上显示一个字符串HELLO!,并以ACOM为文件名存盘
复制下面的文本内容,粘贴于记事本(注意:不要删除中间的空行),保存为ATXT,然后在DOS提示符下输入:DEBUG <ATXT,Ok。
e10d 'HELLO!$'
a100
lea dx,[10d]
mov ah,9
int 21
mov ax,4c00
int 21
rbx
0
rcx
14
nacom
w100
q
-----------------------------------------
2 编写完整汇编程序,将内存中10个有符号数求和。
; 下面的程序是16位汇编,编译通过,运行正确。
; Program Name: Addingasm
Adding SEGMENT
ASSUME CS:Adding,DS:Adding
ORG 100H
Start: jmp Begin
Decimal DW 780,-370,266,48,-127,890,21,640,-1023,513 ; 10个有符号数
Deci_Sum DW
Begin: lea si,Decimal
cld
mov cx,9
lodsw
Adding0: add ax,[si]
inc si
inc si
loop Adding0
mov [si],ax
Exit_Proc: mov ax,4c00h ;结束程序
int 21h
Adding ENDS
END Start
-----------------------------------------
3 编写完整程序将内存中一个无符号字节数以16进制的形式显示在屏幕上
; 下面的程序是16位汇编,编译通过,运行正确。
; Program Name: Hex_ASCIIasm
Hex_ASCII SEGMENT
ASSUME CS:Hex_ASCII,DS:Hex_ASCII
ORG 100H
Start: jmp Begin
DecimalNum db 76 ;无符号字节数
Change_Hex proc near
cmp al,9
ja Charactor
or al,30h
stosb
ret
Charactor: sub al,9
or al,40h
stosb
ret
Change_Hex endp
ChangeHex0 proc near
xor ah,ah
mov cl,4
shl ax,cl
shr al,cl
xchg ah,al
call Change_Hex
xchg ah,al
call Change_Hex
ret
ChangeHex0 endp
Begin: lea di,HeximalASC ;显示十六进制符号字符串地址
cld ;设置变址寄存器变址方向
mov al,DecimalNum
call ChangeHex0
mov al,'$'
stosb
lea dx,HeximalASC ;字符串首地址
mov ah,9 ; 显示结果
int 21h
Exit_Proc: mov ax,4c00h ;结束程序
int 21h
HeximalASC:
Hex_ASCII ENDS
END Start
-----------------------------------------
4 编写完整汇编程序,统计内存中10个有符号数中正数的个数
; 下面的程序是16位汇编,编译通过,运行正确。
; Program Name: positiveasm
positive SEGMENT
ASSUME CS:positive,DS:positive
ORG 100H
Start: jmp Begin
Decimal DW 780,-370,266,48,-127,890,21,640,-1023,513 ; 10个有符号数
Deci_Sum DB ;正数的个数计数器
Begin: lea si,Decimal
cld
mov cx,10
mov Deci_Sum,0 ;计数器清零
positive0: lodsw
test ax,8000h
jz NextOne
inc Deci_Sum
NextOne: loop positive0
Exit_Proc: mov ax,4c00h ;结束程序
int 21h
positive ENDS
END Start
-----------------------------------------
5 编写完整汇编程序,将内存中的5个无符号数从小到大排列
; Program Name: BubblingASM
Bubbling SEGMENT
ASSUME CS:Bubbling,DS:Bubbling,ES:Bubbling
ORG 100H
Start: JMP Begin
Array DB -112,56,72,98,32 ;需要排序的数据
Elem_Num EQU ($-Array)/TYPE Array-1 ;外循环次数
Begin: MOV CX,Elem_Num
Scanning: PUSH CX ;入栈保存外循环次数
LEA SI,Array ;数组首地址装入源变址寄存器
Compare: PUSH SI
POP DI ;当前数组元素地址赋给目的变址寄存器,以备交换之用
LODSB ;将当前数组元素读入累加器
CMP AL,[SI] ;当前数组元素与相邻的下一个数组元素相比较
JBE NextOne ;若小于或等于,不作数据交换,处理下一个数组元素
XCHG AL,[SI] ;若大于,交换数组元素
STOSB ;保存数值较小者
NextOne: LOOP Compare ;处理下一个数组元素
POP CX ;外循环次数出栈
LOOP Scanning ;下一趟比较
Exit_Proc:MOV AX,4C00H ;结束程序
INT 21H
Bubbling ENDS
END Start
-----------------------------------------
6.编写完整汇编语言程序,将内存中一个组合BCD数以十进制显示在屏幕上。
; 下面的程序是16位汇编,以组合BCD码58为例,编译通过,运行正确。
; Program Name: BCD_Codeasm
BCD_Code SEGMENT
ASSUME CS:BCD_Code,DS:BCD_Code
ORG 100H
Start: mov cl,4
mov al,BCD_Str
xor ah,ah
shl ax,cl
shr al,cl
or ax,3030h
xchg ah,al
mov word ptr Dec_Str,ax
lea dx,Dec_Str ;字符串首地址
mov ah,9 ; 显示结果
int 21h
Exit_Proc:mov ax,4c00h ;结束程序
int 21h
BCD_Str db 58h
Dec_Str db ' $'
BCD_Code ENDS
END Start
以上就是关于51单片机16位流水灯汇编程序全部的内容,包括:51单片机16位流水灯汇编程序、16位汇编语言编程如何实现遍历当前目录下以及子目录下的文件来找到所有.txt属性的文件、设AX寄存器中有一16位二进制数,编制汇编语言主程序,统计AX中1的个数,统计结果送入CX中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)