南邮80c51汇编语言编程实验,实验三 查表 多分支(80C51单片机汇编语言编程)

原标题:实验三 查表 多分支(80C51单片机汇编语言编程)

设一表格,表中数为:00H、11H、22H…………FFH,将片内00H单元中的低4位放到片外0000H中(0000H中的高4位为0),高4位放到片外0001H中(0001H中的高4位为0),根据0000H中的数取出表中相应的值存到片内30H中;根据0001H中的数跳到相应的处理程序中,在处理程序中,把相应的位地址置1。

ORG 0000H

START:MOV DPTR,#0000H;

MOV A,#00H

MOVX @DPTR,A

IN CDPTR

MOVX @DPTR,A

MOV DPTR,#00H;将片内00H中的值拆分放入片外相应位置

MOV R1,#00H

MOV A,@R1

ANL A,#0FH

MOVX @DPTR,A

MOV A,@R1

ANL A,#0F0H

RR A

RR A

RR A

RR A

INC DPTR

MOVX @DPTR,A

MOV DPTR,#0000H;相应值赋给30H

MOVX A,@DPTR

MOV DPTR,#TABLE;指向表格的首地址

MOVC A,@A+DPTR

MOV 30H,A

MOV DPTR,#0001H;散转

MOV 20H,#00H;置位前先将20H清零

MOVX A,@DPTR

MOV R1,A;LJMP;A变为3倍

RL A

ADD A,R1

MOV DPTR,#TAB

JMP @A+DPTR

TAB: LJMP PM0

LJMP PM1

LJMP PM2

LJMP PM3

LJMP PM4

LJMP PM5

LJMP PM6

LJMP PM7

LJMP PM8

LJMP PM9

LJMP PMA

LJMP PMB

LJMP PMC

LJMP PMD

LJMP PME

LJMP PMF

PM0:SETB 00H

JMP AA

PM1:SETB 01H

JMP AA

PM2:SETB 02H

JMP AA

PM3:SETB 03H

JMP AA

PM4:SETB 04H

JMP AA

PM5:SETB 05H

JMP AA

PM6:SETB 06H

JMP AA

PM7:SETB 07H

JMP AA

PM8:SETB 08H

JMP AA

PM9:SETB 09H

JMP AA

PMA:SETB 0AH

JMP AA

PMB:SETB 0BH

JMP AA

PMC:SETB 0CH

JMP AA

PMD:SETB 0DH

JMP AA

PME:SETB 0EH

JMP AA

PMF:SETB 0FH

JMP AA

TABLE:DB 00H,11H,22H,33H,44H,55H,66H,77H,88H,99H,0AAH,0BBH,0CCH,0DDH,0EEH,0FFH

AA:SJMP $

责任编辑:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 用汇编语言编写程序,求1~10的和。 代码如下: ``` .model small .stack 100h .data sum dw 0 .code main proc mov ax, 0 mov cx, 10 mov bx, 1 add_loop: add ax, bx inc bx loop add_loop mov sum, ax mov ah, 09h mov dx, offset msg1 int 21h mov ax, sum call disp_num mov ah, 4ch int 21h disp_num proc ; 将数字转换为字符串并输出 push ax push bx push cx mov bx, 10 mov cx, 0 num_loop: xor dx, dx div bx push dx inc cx test ax, ax jnz num_loop ; 输出字符串 mov ah, 02h pop ax out_loop: pop dx add dl, 30h mov ah, 02h int 21h loop out_loop ; 换行 mov ah, 02h mov dl, 0dh int 21h mov dl, 0ah int 21h ; 恢复寄存器 pop cx pop bx pop ax ret msg1 db '1 + 2 + 3 + ... + 10 = $' end main ``` 2. 用汇编语言编写程序,输入三个数,输出其中最大的一个数。 代码如下: ``` .model small .stack 100h .data a dw ? b dw ? c dw ? max dw ? msg1 db '请输入三个整数,用空格隔开:$' msg2 db '最大的数是:$' .code main proc mov ax, @data mov ds, ax ; 输入三个数 mov ah, 09h mov dx, offset msg1 int 21h mov ah, 0ah lea dx, a int 21h lea dx, b int 21h lea dx, c int 21h ; 比较三个数 mov ax, a cmp ax, b jg a_b mov ax, b a_b: cmp ax, c jg a_c mov ax, c a_c: mov max, ax ; 输出最大的数 mov ah, 09h mov dx, offset msg2 int 21h mov ax, max call disp_num ; 退出程序 mov ah, 4ch int 21h disp_num proc ; 将数字转换为字符串并输出 push ax push bx push cx mov bx, 10 mov cx, 0 num_loop: xor dx, dx div bx push dx inc cx test ax, ax jnz num_loop ; 输出字符串 mov ah, 02h pop ax out_loop: pop dx add dl, 30h mov ah, 02h int 21h loop out_loop ; 换行 mov ah, 02h mov dl, 0dh int 21h mov dl, 0ah int 21h ; 恢复寄存器 pop cx pop bx pop ax ret end main ``` 3. 用汇编语言编写程序,输入一个正整数n,输出1~n之间的所有素数。 代码如下: ``` .model small .stack 100h .data n dw ? msg1 db '请输入一个正整数:$' msg2 db '1 到 ' msg3 db ' 之间的素数有:$' .code main proc mov ax, @data mov ds, ax ; 输入一个正整数 mov ah, 09h mov dx, offset msg1 int 21h mov ah, 01h int 21h sub al, 30h mov n, ax ; 输出1到n之间的素数 mov ah, 09h mov dx, offset msg2 int 21h mov ax, 1 call disp_num mov dx, offset msg3 int 21h mov cx, n mov bx, 2 cmp cx, bx jl end_loop mov ax, 2 prime_loop: mov dx, ax div bx cmp dx, 0 jz not_prime call disp_num mov ah, 02h mov dl, ',' int 21h not_prime: inc ax cmp ax, cx jle prime_loop end_loop: ; 退出程序 mov ah, 4ch int 21h disp_num proc ; 将数字转换为字符串并输出 push ax push bx push cx mov bx, 10 mov cx, 0 num_loop: xor dx, dx div bx push dx inc cx test ax, ax jnz num_loop ; 输出字符串 mov ah, 02h pop ax out_loop: pop dx add dl, 30h mov ah, 02h int 21h loop out_loop ; 恢复寄存器 pop cx pop bx pop ax ret end main ``` 4. 用汇编语言编写程序,输入一个正整数n,计算1~n之间所有奇数的和。 代码如下: ``` .model small .stack 100h .data n dw ? sum dw 0 msg1 db '请输入一个正整数:$' msg2 db '1 到 ' msg3 db ' 之间所有奇数的和为:$' .code main proc mov ax, @data mov ds, ax ; 输入一个正整数 mov ah, 09h mov dx, offset msg1 int 21h mov ah, 01h int 21h sub al, 30h mov n, ax ; 计算1到n之间所有奇数的和 mov ah, 09h mov dx, offset msg2 int 21h mov ax, 1 call disp_num mov dx, offset msg3 int 21h mov ax, 1 mov cx, n sum_loop: add sum, ax add ax, 2 cmp ax, cx jle sum_loop mov ax, sum call disp_num ; 退出程序 mov ah, 4ch int 21h disp_num proc ; 将数字转换为字符串并输出 push ax push bx push cx mov bx, 10 mov cx, 0 num_loop: xor dx, dx div bx push dx inc cx test ax, ax jnz num_loop ; 输出字符串 mov ah, 02h pop ax out_loop: pop dx add dl, 30h mov ah, 02h int 21h loop out_loop ; 换行 mov ah, 02h mov dl, 0dh int 21h mov dl, 0ah int 21h ; 恢复寄存器 pop cx pop bx pop ax ret end main ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值