取十六进制的后两位数、中间两位数,以及高位数

设x为6位16进制数变量,lx为低两位数变量,mx为中两位数变量,hx高两位数变量,则:
lx=x&0xFF;
mx=x>>8&0xFF;
hx=x>>16&0xFF;

这是一个可能的汇编代码实现: ``` ORG 0x0000 ; 程序起始地址 ; 定义常量 DELAY_TIME EQU 1000 ; 延迟时间 LED_DATA EQU 0x1000 ; LED点阵据存储地址 ; 定义变量 NUM DW 0x12 ; 要显示的十六进制 START: ; 初始化 MOV AX, LED_DATA ; 将LED点阵据存储地址存入AX寄存器 MOV DS, AX ; 将AX寄存器中的值存入DS寄存器 MOV CX, 8 ; 初始化循环计器 ; 十六进制的两个字 MOV AX, NUM ; 将要显示的十六进制存入AX寄存器 SHR AX, 8 ; 右移8位,高位字 MOV BX, AX ; 将高位字存入BX寄存器 AND BX, 0x0F ; 低4位 MOV AX, NUM ; 将要显示的十六进制存入AX寄存器 AND AX, 0x0F ; 低4位 MOV DX, AX ; 将低位字存入DX寄存器 ; 循环显示每一行 ROW_LOOP: ; 显示高位字 MOV AX, 0x0001 ; 初始化掩码 SHL AX, BX ; 左移BX位,生成掩码 MOV [DS:CX], AX ; 将掩码存入LED点阵据存储区 CALL DELAY ; 延迟一段时间 MOV [DS:CX], 0x0000 ; 将LED点阵据存储区清零 CALL DELAY ; 延迟一段时间 ; 显示低位字 MOV AX, 0x0001 ; 初始化掩码 SHL AX, DX ; 左移DX位,生成掩码 MOV [DS:CX], AX ; 将掩码存入LED点阵据存储区 CALL DELAY ; 延迟一段时间 MOV [DS:CX], 0x0000 ; 将LED点阵据存储区清零 CALL DELAY ; 延迟一段时间 LOOP ROW_LOOP ; 循环显示每一行 ; 程序结束 RET ; 延迟函 DELAY: PUSH AX ; 保存寄存器现场 PUSH BX PUSH CX MOV CX, DELAY_TIME ; 初始化循环计器 DELAY_LOOP: NOP ; 空操作,等待一段时间 LOOP DELAY_LOOP ; 循环延迟 POP CX ; 恢复寄存器现场 POP BX POP AX RET ``` 这个程序实现了将一个8*8的LED点阵用来显示一个两位十六进制。程序首先定义了一些常量和变量,然后进入主程序。主程序首先进行初始化,将LED点阵据存储地址存入DS寄存器,然后出要显示的十六进制的两个字。接着,程序进入循环,每次循环显示一个字的一行。显示字的方法是将字转换为一个二进制掩码,然后将掩码存入LED点阵据存储区,再延迟一段时间后清零。程序使用一个延迟函来实现延迟,这个函使用了循环计器和空操作来等待一段时间。最后,程序结束并返回。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值