汇编程序流程图
A. 求个汇编语言流程图
stack segment para stack 'stack'
db 256 p(0)
top label word
stack ends
data segment para public 'data'
buffer db 16h p(0)
bufpt1 dw 0
bufpt2 dw 0
kbflag db 0
prompt db ' *please practise typing*',0dh,0ah,'$'
scantab db 0,0,'1234567890-=',8,0
db 'qwertyuiop[]',0dh,0
db 'asdfghjkl;',0,0,0,0
db 'zxcvbnm,./',0,0,0
db ' ',0,0,0,0,0,0,0,0,0,0,0,0,0
db '789-456+1230.'
even
oldcs9 dw ?
oldip9 dw ?
str1 db 'abcd efgh ijkl mnop qrst uvwx yz.'
db 0dh,0ah,'$'
str2 db 'there are some newspapers on the table.'
db 0dh,0ah,'$'
str3 db 'there are some clouds in the sky.'
db 0dh,0ah,'$'
str4 db 'she always eats her lunch at noon.'
db 0dh,0ah,'$'
str5 db 'i do not like autumn and winter.'
crlf db 0dh,0ah,'$'
colon db ':','$'
even
saddr dw str1,str2,str3,str4,str5
count dw 0
sec dw 0
min dw 0
hours dw 0
save_lc dw 2 p(?)
data ends
code segment
assume cs:code,ds:data,es:data,ss:stack
main proc far
start:
mov ax,stack
mov ss,ax
mov sp,offset top
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov es,ax
; mov ah,0
; mov al,4
; int 21h
; mov ah,0bh
; mov bh,0
; mov bl,4
; int 11h
mov ah,35h
mov al,09h
int 21h
mov oldcs9,es
mov oldip9,bx
push ds
mov dx,seg kbint
mov ds,dx
mov dx,offset kbint
mov al,09h
mov ah,25h
int 21h
pop ds
mov ah,35h
mov al,1ch
int 21h
mov save_lc,bx
mov save_lc+2,es
push ds
mov dx,seg clint
mov ds,dx
mov dx,offset clint
mov al,1ch
mov ah,25h
int 21h
pop ds
in al,21h
and al,11111100b
out 21h,al
first: mov ah,0
mov al,3
int 10h
mov dx,offset prompt
mov ah,9
int 21h
mov si,0
next: mov dx,saddr[si]
mov ah,09h
int 21h
mov count,0
mov sec,0
mov min,0
mov hours,0
sti
forever:
call kbget
test kbflag,80h
jnz endint
push ax
call dispchar
pop ax
cmp al,0dh
jnz forever
mov al,0ah
call dispchar
call disptime
lea dx,crlf
mov ah,09h
int 21h
add si,2
cmp si,5*2
jne next
jmp first
endint: cli
push ds
mov dx,save_lc
mov ax,save_lc+2
mov ds,ax
mov al,1ch
mov ah,25h
int 21h
pop ds
push ds
mov dx,oldip9
mov ax,oldcs9
mov ds,ax
mov al,09h
mov ah,25h
int 21h
pop ds
sti
ret
main endp
clint proc near
push ds
mov bx,data
mov ds,bx
lea bx,count
inc word ptr[bx]
cmp word ptr[bx],18
jne return
call inct
adj:
cmp hours,12
jle return
sub hours,12
return:
pop ds
sti
iret
clint endp
inct proc near
mov word ptr[bx],0
add bx,2
inc word ptr[bx]
cmp word ptr[bx],60
jne exit
call inct
exit: ret
inct endp
disptime proc near
mov ax,min
call bindec
mov bx,0
mov al,':'
mov ah,0eh
int 10h
mov ax,sec
call bindec
mov bx,0
mov al,':'
mov ah,0eh
int 10h
mov bx,count
mov al,55d
mul bl
call bindec
ret
disptime endp
bindec proc near
mov cx,100d
call decdiv
mov cx,10d
call decdiv
mov cx,1
call decdiv
ret
bindec endp
decdiv proc near
mov dx,0
div cx
mov bx,0
add al,30h
mov ah,0eh
int 10h
mov ax,dx
ret
decdiv endp
kbget proc near
push bx
cli
mov bx,bufpt1
cmp bx,bufpt2
jnz kbget2
cmp kbflag,0
jnz kbget3
sti
pop bx
jmp kbget
kbget2:
mov al,[buffer+bx]
inc bx
cmp bx,16h
jc kbget3
mov bx,0
kbget3:
mov bufpt1,bx
pop bx
ret
kbget endp
kbint proc near
push bx
push ax
in al,60h
push ax
in al,61h
or al,80h
out 61h,al
and al,7fh
out 61h,al
pop ax
test al,80h
jnz kbint2
mov bx,offset scantab
xlat scantab
cmp al,0
jnz kbint4
mov kbflag,80h
jmp kbint2
kbint4:
mov bx,bufpt2
mov [buffer+bx],al
inc bx
cmp bx,16h
jc kbint3
mov bx,0
kbint3:
cmp bx,bufpt1
jz kbint2
mov bufpt2,bx
kbint2: cli
mov al,20h
out 20h,al
pop ax
pop bx
sti
iret
kbint endp
dispchar proc near
push bx
mov bx,0
mov ah,0eh
int 10h
pop bx
ret
dispchar endp
code ends
end start
B. 汇编高手进来帮忙画下流程图!!
这是一个找出从BUF开始存储的8个字节中的最小数的程序,下面的代码已给出详细注释
;此处输入
数据段
代码
DATAS
SEGMENT
BUF
DB
13,25,23,100,223,78,90,134
;
定义8个字节
CNT
EQU
$-BUF
;CNT=8
DATAS
ENDS
;此处输入代码段代码
CODES
SEGMENT
ASSUME
CS:CODES,DS:DATAS
START:
MOV
AX,DATAS
;初始化数据段
MOV
DS,AX
MOV
CX,CNT-1
;cx=CNT-1=7,除第一个字节以外,共循环7次
MOV
SI,OFFSET
BUF
;si保存BUF的首地址
CALL
SEARCH
;调用SEARCH过程,找出最小值
MOV
AH,4CH
;程序结束
INT
21H
SEARCH
PROC
NEAR
MOV
BL,[SI]
;bl先取出第一个字节
SEAR1:
INC
SI
;si=si+1
CMP
BL,[SI]
;如果bl比下一个字节[si]的数值要小
JBE
SEAR2
;那么直接跳到SEAR2处执行
MOV
BL,[SI]
;否则bl=[si],保存当前找到的最小数值
SEAR2:
DEC
CX
;cx=cx-1,cx控制程序的循环次数
JNZ
SEAR1
;cx=0时si已经遍历了BUF数组的每个字节,循环结束
MOV
DL,BL
;此时bl里存的便是找到的最小数,dl=bl
MOV
CL,4
;cl=4
SHR
DL,CL
;dl右移4位,此时dl保存的是bl的高4位
CALL
DISP
;调用disp输出bl的高4位
MOV
DL,BL
;再次赋值
AND
DL,0FH
;把dl的高4位设置为0,此时dl保存的是bl的低四位
CALL
DISP
;调用disp输出bl的低4位
RET
;返回
SEARCH
ENDP
DISP
PROC
NEAR
CMP
DL,9
;如果dl
<=
9
JBE
DISP1
;那么直接跳转到DLSP1执行
ADD
DL,7
;否则dl=dl+7,+30h以后便对应
16进制
的'A'~'F'字符
DISP1:
ADD
DL,30H
;dl=dl+30h,如果dl<=9那么dl被转化为'0'~'1',如果dl>9由于加过7,所以对应'A'~'F'
MOV
AH,2
;2号功能调用输出dl里的一个字符
INT
21H
RET
;返回
DISP
ENDP
CODES
ENDS
END
START
流程图:
C. 汇编高手进来帮忙画下流程图!!
这是一个找出从BUF开始存储的8个字节中的最小数的程序,下面的代码已给出详细注释
;此处输入数据段代码
DATAS
SEGMENT
BUF
DB
13,25,23,100,223,78,90,134
;
定义8个字节
CNT
EQU
$-BUF
;CNT=8
DATAS
ENDS
;此处输入代码段代码
CODES
SEGMENT
ASSUME
CS:CODES,DS:DATAS
START:
MOV
AX,DATAS
;初始化数据段
MOV
DS,AX
MOV
CX,CNT-1
;cx=CNT-1=7,除第一个字节以外,共循环7次
MOV
SI,OFFSET
BUF
;si保存BUF的首地址
CALL
SEARCH
;调用SEARCH过程,找出最小值
MOV
AH,4CH
;程序结束
INT
21H
SEARCH
PROC
NEAR
MOV
BL,[SI]
;bl先取出第一个字节
SEAR1:
INC
SI
;si=si+1
CMP
BL,[SI]
;如果bl比下一个字节[si]的数值要小
JBE
SEAR2
;那么直接跳到SEAR2处执行
MOV
BL,[SI]
;否则bl=[si],保存当前找到的最小数值
SEAR2:
DEC
CX
;cx=cx-1,cx控制程序的循环次数
JNZ
SEAR1
;cx=0时si已经遍历了BUF数组的每个字节,循环结束
MOV
DL,BL
;此时bl里存的便是找到的最小数,dl=bl
MOV
CL,4
;cl=4
SHR
DL,CL
;dl右移4位,此时dl保存的是bl的高4位
CALL
DISP
;调用disp输出bl的高4位
MOV
DL,BL
;再次赋值
AND
DL,0FH
;把dl的高4位设置为0,此时dl保存的是bl的低四位
CALL
DISP
;调用disp输出bl的低4位
RET
;返回
SEARCH
ENDP
DISP
PROC
NEAR
CMP
DL,9
;如果dl
<=
9
JBE
DISP1
;那么直接跳转到DLSP1执行
ADD
DL,7
;否则dl=dl+7,+30h以后便对应16进制的'A'~'F'字符
DISP1:
ADD
DL,30H
;dl=dl+30h,如果dl<=9那么dl被转化为'0'~'1',如果dl>9由于加过7,所以对应'A'~'F'
MOV
AH,2
;2号功能调用输出dl里的一个字符
INT
21H
RET
;返回
DISP
ENDP
CODES
ENDS
END
START
流程图:
D. 单片机汇编程序的流程图是什么
初学单片机的40个实验(含汇编程序、C程序、流程图)
给初学者单片机的40个实验,带源码,需要资料的加群:813238832
也可以到闯客网技术论坛下载更多关于单片机,MTK的资料和学习案例
模拟开关灯
1. 实验任务
如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
电路原理图
图一
更多资料在闯客网下载链接:https://bbs.usoftchina.com/thread-200737-1-1.html
3. 系统板上硬件连线
(1). 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;
(2). 把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;
4. 程序设计内容
(1). 开关状态的检测过程
如无法正常展示请点击一键反馈
