gpt4 book ai didi

assembly - 创建一个 ASM 文件,该文件将返回位于 8 个连续寄存器中的字符

转载 作者:行者123 更新时间:2023-12-02 20:05:04 25 4
gpt4 key购买 nike

我必须为 PIC18F452 创建一个 ASM 文件来执行以下操作:

(a) 将标签 MapName 定义为包含不超过 7 个字符的以 null 结尾的字符串的 8 个连续寄存器中的第一个。 (b) 访问在 C 文件中声明的名为 MapIndex 的 8 位无符号整数变量。 (c) 定义一个 ASM 函数 getMapChar,可以使用函数原型(prototype) char getMapChar(void) 从 C 调用该函数。当 MapIndex 的值 <= 7 时,该函数应返回适当的字符;如果 MapIndex > 7,则返回值 255。 (d) 使标签 MapName getMapChar 可通过外部 C 文件访问。

到目前为止我的代码如下所示:

; Configuration word : WDT off, power-up timer on, code protect off, RC oscillator

list = p18f452

MapName equ 0x20
MapName1 equ 0x21
MapName2 equ 0x22
MapName3 equ 0x23
MapName4 equ 0x24
MapName5 equ 0x25
MapName6 equ 0x26
MapName7 equ 0x27
CurrentChar equ 0x28

extern MapIndex

org 0x00
goto getMapChar

getMapChar
movlw 0x00
movwf MapName7

GLOBAL getMapChar
GLOBAL MapName

END

我已经完成了 (a)、(b) 和 (d) 部分,但在编写使用 MapIndex 的值自动遍历每个连续寄存器的代码时遇到了一些问题。有人可以帮我吗?我们将不胜感激。

最佳答案

您可以使用FSR(文件选择寄存器)之一来寻址MapName文件寄存器:

lfsr    0, MapName      ;Load 12bit file address pointer to FSR0
movf MapIndex, w ;Load MapIndex to WREG ; or movff MapIndex, WREG
addwf FSR0L, f ;Add MapIndex to FSR0 low byte
movf INDF0, w ;Load MapName[MapIndex] to WREG

如果变量 MapName 的所有文件寄存器不在 8 位地址空间内,则在将 MapIndex 添加到 FSR0L 后检查 Carry 溢出标志。如果设置了进位,也会增加FSR0H文件寄存器。

关于assembly - 创建一个 ASM 文件,该文件将返回位于 8 个连续寄存器中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com