实验 4 [bx]和 loop 的使用

     计软院       专业      计科       年级       2017级   班次          4班         姓名       江漪雯         学号   20171308150    

实验结论

1、综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据 0403H。

    编写汇编程序如下图,命名为t1.asm。(注意:字单元,填充下一个需要使bx+2,即执行两条inc bx命令,

    相当于bx中的内容加2。

 

分别进行编译,连接,运行。

进行清屏操作后,运行程序,显示结果。

将源代码程序中字数据 0403H→修改为 0441H,再次运行,截图显示运行结果。

只需打开他t1.asm,将值修改并保存



 
2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据
0~63(3FH)
(注意:是字节数据,0到3F 要执行3F+1=40次,cx=40)
 
编写程序
 

编译,连接

 
查看原始值后,反汇编,查看是否输入正确

 使用T命令单步执行,再次遇到loop指令时,使用P命令执行,直到cx=0为止。

调试完毕,,用 d 命令查看 0:200~0:23F,确认是否将0~63传送至此段内存区域。

 也可使用G命令直接执行完。

实验任务3:教材实验4(3)(P121)

mov ax 后面填写的是 cs,根据题意复制的内容是代码,所以要把代码段段地址赋给数据段段地址。

mov cx 后面填写的是17h,因为要复制的内容是 mov ax,4c00h 前的内容,所以复制的代码是从 mov ax,cs 到 loop s。mov 用在寄存器之间占 2 个字节,用在寄存器和立即数之间占 3 个字节,inc bx 占 1 个字节,而loop s 相当于寄存器间的 mov 指令,占 2 个字节,因此可以计算出加起来程序长度为 17h。

编程序

进行编译,连接后用T命令,P命令调试(下面多打了一个a)

查看后得知);200~0:216存放这所编写的机器码

反汇编,得知0:200~0:215是我们编写的汇编指令,确认无误。

 总结与体会

1.要熟练掌握编译,连接运行的操作步骤

2.在 汇编源程序中,数据不能以字母开头,所以要在前面加0。在编写代码前要搞清楚运算后的结果是否会超出dx所能存储的范围,用哪个寄存器进行累加,如何进行寄存器之间的赋值这三个问题。

3.要学会计算程序的长度。

4.要学会使用T命令和P命令之间的配合调试操作。

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/jywe/p/10014037.html

好的,以下是使用汇编语言实现LED3闪烁实验的步骤: 1. 首先,需要设置GPIO端口,将LED3连接到对应的GPIO端口上。在STM32F4开发板上,LED3对应的GPIO端口为PD13,因此需要将PD13设置为输出模式。 2. 接下来,需要设置系统时钟,在这里我们选择使用HSI时钟,将系统时钟设置为16MHz。 3. 然后,需要实现一个延时函数,用来控制LED3的闪烁频率。这里我们选择使用循环计数的方式实现延时函数。 4. 最后,实现LED3闪烁功能的主程序。在主程序中,先将LED3设置为关闭状态,然后循环执行将LED3设置为打开状态、延时、将LED3设置为关闭状态、再次延时的操作,以实现LED3的闪烁。 下面是具体代码实现: ``` ; STM32F4 LED3闪烁汇编程序 ; 设置GPIO端口PD13为输出模式 LDR R0, =RCC_AHB1ENR LDR R1, [R0] ORR R1, #0x08 STR R1, [R0] LDR R0, =GPIOD_MODER LDR R1, [R0] ORR R1, #0x400000 STR R1, [R0] ; 设置系统时钟为16MHz LDR R0, =RCC_CR LDR R1, [R0] ORR R1, #0x01 STR R1, [R0] LDR R0, =RCC_CFGR LDR R1, #0x00 STR R1, [R0] ORR R1, #0x02 STR R1, [R0] LDR R0, =RCC_CR LDR R1, [R0] ORR R1, #0x02 STR R1, [R0] ; 等待系统时钟稳定 LDR R0, =0x100000 WAIT: SUBS R0, #1 BNE WAIT LDR R0, =FLASH_ACR LDR R1, [R0] ORR R1, #0x30 STR R1, [R0] ; 延时函数 DELAY: LDR R0, =0x1000 LOOP1: SUBS R0, #1 BNE LOOP1 BX LR ; 主程序 MAIN: LDR R0, =GPIOD_BSRR LDR R1, #0x2000 STR R1, [R0] ; 延时 BL DELAY LDR R0, =GPIOD_BSRR LDR R1, #0x20000000 STR R1, [R0] ; 延时 BL DELAY B MAIN ``` 注意:具体的寄存器地址和数值需要根据所使用的STM32F4开发板和所连接的LED3端口进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值