求一简单汇编程序

求一简单汇编程序,请先说明其功能,然后再附详细注释,谢谢各位高手了!老师按照程序的功能复杂程度打分,但是要求现场按老师修改,所以最好有个平衡,既简单保险,又能够实现一些的功能。先给50分,解决问题后再加三十分!

下列程序运行后,先进行初始化。
之后如果串行口收到数据,程序会立即转到串口中断程序,把数据送到P2口显示。
程序虽然简短,涉及面较广,在书里面,涵盖三~四章的内容。

ORG 0000H ;0000H是开机复位后起始地址,这是固定的.
LJMP MAIN ;跳转到 MAIN 程序段.
;-------------------------------
ORG 0023H ;0023H是串行口中断的入口地址,这也是固定的.
;下面写的就是串行口中断程序.
CLR RI ;RI=1才发生的串口中断,必须清零,否则中断就没有个完了.
MOV A, SUBF ;取出串口收到的数据.
MOV P2,A ;送到P2口,外接LED就能显示.
RETI ;中断程序结束,返回主程序.
;-------------------------------以上几行是串口中断程序.

ORG 0040H ;0040H 是MAIN的地址,离开0023H几十字节即可.
MAIN:MOV SP,#5FH ;设置堆栈指针,为中断过程准备存储地址的空间.
;-------------------------------
MOV TMOD,#20H ;这三条,是设置定时器的工作方式.
MOV TH1,#0FDH ;(同上) 用来控制波特率.
MOV TL1,#0FDH ;(同上).
SETB TR1 ;对TR1置1,即为启动定时器.
;-------------------------------以上四行,是针对定时器的.

MOV SCON,#50H ;设置串行口的工作方式.
;在这里指定了用定时器1,控制波特率.
MOV PCON,#00H ;这也是用来控制波特率的.
;-------------------------------以上二行,是针对串行口的.

SETB EA ;中断总开关置1,即开放总中断.
SETB ES ;串口中断开关置1,即开放串口中断.
;-------------------------------以上二行,是针对中断系统的.

SJMP $ ;等待中断的发生.
;如果串口收到数据,立即转到0023H.
;在0023H执行时,遇到RETI,就返回到这里.
END
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-29
ORG 0000h
AJMP start
ORG 0030h
start:
MOV A,#0ffh
CLR C
MOV R2,#08h ;循环八次。
loop: RLC A ;带进位左移。
MOV P2,A ;输出到P1口。
CALL delay ;延时一段时间
DJNZ R2,loop ;反复循环
MOV R2,#07h ;再往回循环。
loop1: RRC a ;带进位右移
MOV P2,a ;输出到P1口。
CALL delay ;延时一段时间
DJNZ R2,loop1 ;反复循环
JMP start ;重新开始
delay: MOV R3,#20 ;延时子程序
d1: MOV R4,#20
d2: MOV R5,#248
DJNZ R5,$
DJNZ R4,d2
DJNZ R3,d1
RET
END
第2个回答  2010-11-30
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
N equ 100
Start: push cs
pop ds ;使数据段与代码段同段
cld ;清方向标志,使变址寄存器增值
lea si,DATA ;字数据首地址
mov cx,N ;100个字数据
Find_Even: lodsw ;读入一个字数据
test ax,1 ;是偶数?
jz $+6 ;是,找到第一个偶数,退出循环,转去找最小偶数
loop Find_Even
jcxz Exit_Proc ;没有偶数,结束程序
dec cx
jcxz Exit_Proc ;最后一个字数据是偶数,结束程序
; 开始找最小偶数
Compare: test [si],1 ;是奇数?
jnz Next_one ;是,转去处理下一个字数据
cmp ax,[si] ;当前最小值与当前字数据比较
jbe Next_one ;当前最小值小于或等于当前字数据,不更新最小值
mov ax,[si] ;当前最小值大于当前字数据,更新最小值
Next_one:inc si
inc si
loop Compare
Exit_Proc: mov ah,4ch ;结束程序
int 21h
DATA:
Code ENDS
END Start ;编译到此结束
第3个回答  2010-11-30
mess segment
a DB 'Hello,world',0dh,0ah,'$'
count db 11
mess ends
program segment
main proc far
assame cd:program,ds:mess
start:
push ds
sub ax,ax
push ax
mov ax,mess
mov ds,ax
mov cx,count
mov di,0
lea dx,a
next:mov al,[a+di]
mov ah,2
int 21h
inc di
loop next
ret
main endp
program ends
end start

汇编语言编制程序,实现从1加到100
最简短的完整程序:CODE SEGMENT ASSUME CS:CODE START:;--- MOV AX, 0 MOV CX, 100 S: ADD AX, CX LOOP S ;---基本的,就上面四行--- MOV AH, 4CH INT 21H CODE ENDS END START

汇编程序
ADD AL,BL ;将AX的地位AL,和BX的地位BL,即AL=34H+78H=BCH(16进制)DAA ;压缩BCD码调整指令(AL=AL+60H),即AL调整后,AL=12H(CF=1)MOV CL,AL ;AL赋值到CL MOV AL,AH ;AL赋值到AH ADC AL,BH ;带进位相加,AL=AL+BH +CF=69H DAA ;压缩BCD调整。AL=69H 执行...

求汇编程序 七段数码管显示从0到9的程序 按键按一下加一 按一下减一...
七段共阳数码管接在P0口,显示从0到9, 按键接P3.2按一下加一, 按键P3.3 按一下减一。程序如下:K1 BIT P3.2 K2 BIT P3.3 START:MOV DPTR,#TABLE MOV R1,#0 MLOOP:MOV A,R1 MOVC A,@A+DPTR MOV P0,A JB K1 ,TK2 CJNE R1,#9,CPM CPM:JNC MLOOP INC R1 JNB K1,...

微型简单汇编程序求解
27,写出一条指令将一个字从端口1000H输出 答:MOV DX, 1000H ;将端口地址传送到DX中(80x86系统中,端口地址大于8位时,必须 先将地址存放到DX中)OUT DX,AL ;将字的低八位输出到端口1000H中 MOV AL, AH ;将字的高八位存放到AL中 OUT DX, AL ;输出字的高八位 28, ...

求一简单汇编程序
LJMP MAIN ;跳转到 MAIN 程序段.;--- ORG 0023H ;0023H是串行口中断的入口地址,这也是固定的.;下面写的就是串行口中断程序.CLR RI ;RI=1才发生的串口中断,必须清零,否则中断就没有个完了.MOV A, SUBF ;取出串口收到的数据.MOV P2,A ;送到P2口,外接LED...

用汇编语言编一个程序
09H INT 21H LOOP LOOP2LABEL1: POP AX PUSH AX ; 计算第 i 行显示字符数 MOV CX, 15 SUB CX, AX INC CXLOOP3: ; 显示 * 号 MOV DX, OFFSET STAR MOV AH, 09H INT 21H LOOP LOOP3 ; 换行 MOV DX, OFFSET LINE MOV AH, 09H ...

用汇编语言编写一个程序
使用汇编语言编写程序实现用户登录功能,包含用户名和密码输入与验证。程序通过结构类型定义用户名和密码信息,并实现输出、获取光标位置、设置光标位置、窗口上滚、输入密码以及用户输入错误处理等功能。主要步骤包括初始化环境、输入用户名、验证用户名、输入密码、验证密码、显示欢迎信息和结束程序。程序首先初始...

简单汇编程序求解答,初学不懂这是啥功能
51 单片机,只有 8 位数乘以 8 位数的指令。如果,参加运算的数字,超过了 8 位,就必须编写程序来解决。楼主给出的程序,是 16 位数乘以 8 位数的。乘积,是 24 位数的。上述的数字,存放位置,可以从程序中看出来。楼主,还是自己分析一下吧。

求汇编程序,两个按键开关,一个数码管,一个开关按一按使数码管加一,另一...
硬件连接:按键1连接在P1。0口 按键2连接在P1。1口 数码管连接在P0口 an1 bit p1.0 an2 bit p1.1 con equ 31h org 0 ajmp start org 30h start:mov dptr,#table mov con,#0 main: lcall anjian lcall display ajmp main anjian:jb an1,next lcall dely jb an1,next inc con mo...

求一个汇编语言程序实例(MASM for windows环境下)
;分析:每个元素是一个8位有符号二进制数,因此要判断其是否为正数,;需选择带符号数条件转移指令进行判断转移(例如JG,JNG,JL,JNL)。;由于共有n个元素,因此整个程序的结构就是对以上判断重复n次.ASSUME CS:CODE, DS:DATA DATA SEGMENT BUF DB 1,2,3,4,5,6,7,-8,-9,0 N EQU $ - BUF...

相似回答