嵌入式与汇编开发实践指南

34、如何下载 vasm 交叉汇编器并以 Amiga 模式构建它?

从 http://sun.hasenbraten.de/vasm 下载 vasm 交叉汇编器。使用以下命令以 Amiga 模式构建它:


make CPU=m68k SYNTAX=mot

35、使用 vasm 汇编程序时,对应的汇编命令是什么?

使用
vasm
以如下命令汇编你的汇编程序:


./vasmm68k_mot -kick1hunks -Fhunkexe -o myexe -nosym myprog.asm

36、从https://pypi.org/project/amitools/安装适用于Python的amitools。创建一个磁盘映像并将文件写入其中,然后使用以下命令使磁盘映像可引导:

xdftool mydisc.adf create
xdftool mydisc.adf format “title”
xdftool mydisc.adf write myexe
xdftool mydisc.adf boot install
xdftool mydisc.adf makedir S
echo myexe > STARTUP – SEQUENCE
xdftool mydisc.adf write STARTUP – SEQUENCE S/
请简述上述操作的具体内容。

步骤说明

此步骤指导你从指定链接安装适用于Python的
amitools
,接着创建磁盘映像、写入文件并使其可引导。

具体操作命令依次为:

创建磁盘映像 格式化磁盘并设置标题 写入可执行文件 安装引导程序 创建名为
S
的目录 创建启动序列文件并将可执行文件名写入其中 最后将启动序列文件写入磁盘的
S
目录

37、从https://fs-uae.net/download下载并安装FS – UAE Amiga模拟器。运行它并从你的虚拟mydisk.adf磁盘映像启动。

从指定链接( https://fs-uae.net/download )下载并安装 FS-UAE Amiga 模拟器 。 安装完成后,运行该模拟器。 从虚拟的
mydisk.adf
磁盘映像启动。

38、如何使用开源的Wokwi Arduino模拟器运行示例Arduino程序并使用汇编器?

使用开源的 Wokwi Arduino 模拟器 运行示例 Arduino 程序。
要使用汇编器,请访问 blink.S 选项卡 ,
或在 https://github.com/arcostasi/avr8js-electron-playground 找到离线版本。

39、判断对错:Arduino 的 I/O 引脚均可配置为输入或输出。如果某个引脚没有按预期进行读取或写入,需要先检查是否已将其设置为正确的模式。

这句话是正确的。这是关于 Arduino I/O 引脚使用的提示,提醒使用者当引脚工作异常时,要先确认引脚的输入/输出模式设置是否正确。

40、市面上有许多价格实惠的 Arduino 入门套件,若购买一套并在真正的硬件上运行示例程序,使用真正的 LED 时需要注意什么?

使用真正的 LED 时,要记住作为二极管,它们是有方向性的,必须正确连接,并且始终要与一个电阻 并联 ,否则会爆炸。

41、If you prefer command line tools to the Arduino IDE, what is the AVR assembler and what is the AVR downloader/uploader?

AVRA is the AVR assembler, and AVRDUDE is the AVR downloader/uploader.

42、创建一个名为 hello16bit.asm 的汇编文件,该文件使用 16 位 x86 指令,引导加载程序放置此代码的基地址为 0x7c00。文件包含一个数据段,其中定义了一个字符串 ‘Hello, World!’ 以及换行符和结束符;一个代码段,包含一个用于打印 ASCII 字符串的子程序,还有程序入口和主流程。最后将 512 字节引导扇区的其余部分清零,并标记扇区为可引导。


bits 16         ; tell NASM we're only using 16-bit x86
org 0x7c00      ; base address for bootloader to place this code

section .data   ; this segment is read-write data
message db 'Hello, World!', 13, 10, 0

section .text   ; this segment is read-only code
entry:
    jmp start

printer:
    ; subroutine for printing ASCII strings
    lodsb               ; load SI into AL and increment SI [next char]
    or al, al           ; check if the end of the string
    jz printer_end
    int 0x10            ; otherwise, call interrupt to print char
    jmp printer         ; loop

printer_end:
    ret                 ; return flow

start:
    mov si, message     ; say what we want to print
    mov ah, 0x0e
    call printer        ; print it

    ; ** add your own code here ... **

    hlt

times 510-($-$$) db 0   ; zero out rest of 512-byte boot sector
dw 0xaa55               ; code to mark sector as bootable

43、运行以下命令:mkdir -p cd/boot; nasm hello16bit.asm -o cd/boot/loader.sys; mkisofs -R -J -c boot/bootcat -b boot/loader.sys -no-emul-boot -o cd.iso cd ,请说明这些命令的作用。

操作步骤

创建目录
cd/boot
(若不存在则创建):

bash mkdir -p cd/boot

使用 NASM 将
hello16bit.asm
文件汇编为可执行机器代码,并输出到
cd/boot/loader.sys
文件:

bash nasm -f bin hello16bit.asm -o cd/boot/loader.sys

使用
mkisofs
工具生成一个 ISO 文件,将之前生成的
loader.sys
文件作为引导文件,最终生成的 ISO 文件名为
cd.iso


bash mkisofs -o cd.iso -boot-info-table -c boot/bootcat -b boot/loader.sys cd

44、ASCII字符串在人类可读字母之后包含特殊的ASCII码13、10和0。这些是什么?

以下是给定的【文本内容】:

特殊ASCII码13代表回车符(Carriage return),10代表换行符(Line feed),0代表空字符(Null)。

45、Visit https://www.virtualbox.org for instructions on how to install VirtualBox on your system.(请翻译此句子)

访问 https://www.virtualbox.org 获取在你的系统上安装 VirtualBox 的说明。

46、Once installed, create a new virtual machine by clicking the New icon; use the default settings.

安装完成后,点击“新建”图标创建一个新的虚拟机;使用默认设置。

47、启动你的虚拟机,并在被询问时选择你的 cd.iso 文件来“插入”可引导的虚拟 CD。

启动你的虚拟机,并在被询问时选择你的 cd.iso 文件来“插入”可引导的虚拟 CD。

48、Use a program such as Etcher (https://www.balena.io) for your current operating system to burn the ISO to a USB stick.

使用适用于你当前操作系统的程序,如 Etcher ,将 ISO 文件刻录到 USB 闪存驱动器上。

49、如何让电脑从可引导的USB闪存驱动器启动?请简要说明步骤。

当拥有可引导的 USB 闪存驱动器后,要让电脑从其启动。电脑当前可能从硬盘启动,可通过 BIOS 配置工具更改,编辑设置即“进入 BIOS”。

多数机器开机时按住特定键(常为 ESC、DEL、F1、F2、F8、F10 或 F11,不确定时可滑动键盘顶行按键尝试)进入。

进入后能看到低分辨率 BIOS 菜单,可指定启动顺序并将 USB 设为首位。部分机器需先禁用额外安全功能才能从新设备启动。

50、多次调用BIOS例程来点亮屏幕上的像素以绘制一个简单的形状,应该怎么做?

要多次调用BIOS例程来点亮屏幕上的像素以绘制简单形状,步骤如下:

设置图形模式; 多次调用点亮像素的BIOS例程,每次设置不同的像素坐标; 完成绘制。

示例代码思路(以汇编语言为例):


; 设置图形模式
int 10h
; ask BIOS to set graphics mode
mov al, 1100b ; desired pixel RGB color
mov cx, 10    ; desired pixel x coordinate
mov dx, 20    ; desired pixel y coordinate
mov ah, 0ch   ; ask BIOS to light the pixel
int 10h

; 可以修改cx和dx的值来改变像素坐标,多次调用以绘制形状
; 例如,绘制一个简单的直线
for (int i = 0; i < 10; i++) {
    mov cx, i        ; 修改x坐标
    mov dx, 20       ; y坐标保持不变
    mov ah, 0ch      ; ask BIOS to light the pixel
    int 10h
}

以上代码仅为示例,实际使用时需要根据具体需求调整坐标和循环条件。

51、在Jupiter环境中,编写一个简单程序,要求定义一个名为__start(两个下划线)的全局标签,将其作为程序运行的入口点。若程序中有数据行,需采用哈佛式分段,使用.data和.text段。

以下是符合要求的简单程序示例:


.globl __start
__start:
    li t0, 0

如果程序中有数据行,默认Jupiter采用哈佛式分段,需要
.data

.text
段,示例如下:


.globl __start

.data
mylabel: .word 17
myfloat: .float 34.56

.text
__start:
    lw x5, mylabel      ; 从地址mylabel处加载字到寄存器x5
    la x6, mylabel      ; 加载mylabel的地址到x6(不是其内容)

myloop:
    sw x5, 0(x6)        ; 将寄存器x5的值存储到地址0 + x6(即mylabel)
    j myloop

52、请解释以下代码中数据段和文本段的作用以及代码实现的功能:.globl __start .data mylabel: .word 17 myfloat: .float 34.56 .text __start: lw x5, mylabel ; 从地址mylabel处加载字到寄存器x5 la x6, mylabel ; 将mylabel的地址加载到x6(不是其内容) myloop: sw x5, 0(x6) ; 将寄存器x5的值存储到地址0 + x6(即mylabel) j myloop

此示例展示了在采用哈佛式分段时,程序中数据段(
.data
)和文本段(
.text
)的使用。

在数据段定义了以下内容:

名为
mylabel
的字数据 名为
myfloat
的浮点数据

在文本段实现了以下操作:


mylabel
的值加载到寄存器
x5

x5
的值存回
mylabel
地址的循环操作

53、请简述在程序操作中保存并运行程序、设置断点、检查寄存器和内存以及返回代码界面的操作步骤。

操作步骤为:

保存并汇编每个程序(运行 ▸ 汇编); 然后在模拟器中运行; 可随时通过行左侧的复选框设置断点; 并使用右侧的图形用户界面检查寄存器和内存; 要回到代码界面,点击左上角的“编辑器”。

54、如何获取完整的Chisel教程并完成安装和学习?

若要完成该操作,可按以下步骤进行:

访问 https://github.com/ucb-bar/chisel-tutorial 获取 Chisel 教程; 根据教程中的安装指南安装 Chisel; 按照教程内容逐步学习和实践。

55、The Rocket Chip Generator (https://github.com/chipsalliance/rocket – chip) is a tool that takes a RISC – V CPU descriptor code such as RV64IMFP as input, and outputs Chisel and Verilog files (or a C++ simulation) for the desired CPU. Install and run Rocket Chip. Study the outputs to find out how the microcircuits you looked at in the previous problem are used in the generated CPU.

Rocket芯片生成器( GitHub仓库 )是一个工具,它以RISC-V CPU描述符代码(如
RV64IMFP
)作为输入,为所需的CPU输出Chisel和Verilog文件(或C++模拟)。

步骤:

安装并运行Rocket芯片。 研究输出结果,找出上一个问题中所看到的微电路在生成的CPU中是如何使用的。

56、Torture(https://github.com/ucb – bar/riscv – torture)是RISC – V社区提供的一个工具,用于测试硬件设计中RISC – V的正确执行情况,并帮助定位错误。请简述安装该工具,在Rocket Chip设计中引入一个故意的错误,然后使用该工具研究这个错误的大致步骤。

该任务的大致步骤如下:

安装Torture工具:通过访问其GitHub仓库 ( https://github.com/ucb-bar/riscv-torture ),按照仓库中的说明进行安装,可能涉及克隆仓库、配置环境依赖等操作。

在Rocket Chip设计中引入故意的错误:找到Rocket Chip的设计代码,在合适的位置引入一个明确的错误,比如修改指令执行逻辑、寄存器读写规则等。

使用Torture工具研究错误:运行Torture工具对引入错误后的Rocket Chip设计进行测试,工具会执行一系列的测试用例,观察工具输出的结果,根据输出的错误信息定位错误所在的位置和原因。

57、请描述访问相关网站加入RISC – V社区讨论、研究开放的lowRISC设计,并将从这些资源中找到的有趣工作成果贡献给RISC – V社区的步骤。

主要步骤为:

先到 https://riscv.org 加入 RISC-V 社区讨论; 接着到 https://github.com/lowrisc 研究开放的 lowRISC 设计; 然后从中找到待完成的有趣工作; 最后将成果贡献给 RISC-V 社区。

58、尝试运行x86 MMX、SSE和AVX代码。可以使用.iso文件在裸机上运行它们。或者,若对操作系统有一定的了解,可查看相关附录,在操作系统内部运行这些代码,这种方式是进行x86汇编开发的更快方法。

可使用
.iso
文件在裸机运行代码,若了解操作系统,可查看附录在系统内运行,后者是更快的 x86 汇编开发方式。

59、若你可以使用英伟达GPU(可以是自己电脑上的,也可以通过像https://colab.google这样有GPU选项的免费云服务),要编译、编辑并运行PTX示例,为了创建内核调用和输入数据的关联,需要做什么?请描述具体步骤和文件内容。

若能使用英伟达GPU,可编译、编辑和运行PTX示例。为建立调用内核及输入数据的关联,需创建
mykernel.ptx
文件,文件中包含以下内容:

告知汇编器使用的版本的指令 ,如:

.version 7.1


.target sm_75


.address_size 64

描述代码如何与主机上的C代码进行交互,定义参数

说明使用的不同类型寄存器的数量 ,包括:
– 谓词寄存器
– 32位整数寄存器
– 64位(双精度)浮点寄存器
– 64位(双精度)整数寄存器

将参数指针加载到特定寄存器 ,如:
– 将参数指针加载到
rd1 - 3

– 并将作业ID加载到
r1
的通用部分

把指针地址转换为全局内存地址 ,如将
x

w

out
的指针地址转换为全局地址。

最后可在指定位置放入所选示例代码。

60、将示例中的代码粘贴到指定行以下进行整合。然后使用以下命令将其汇编成英伟达可执行(cubin)代码:ptxas -arch=sm_75 –opt-level 0 “mykernel.ptx” -o “mykernel.cubin” 这里,-arch 参数是你所使用的英伟达型号的代码,例如,sm_75 是图灵架构的实际名称。

先将示例代码粘贴到指定行以下完成代码整合,然后在命令行中输入:


ptxas -arch=sm_75 --opt-level 0 "mykernel.ptx" -o "mykernel.cubin"

并执行,即可将代码汇编成英伟达可执行的
cubin
代码,其中
-arch
参数需根据实际使用的英伟达型号进行调整。

61、如果你想将可执行文件以人类可读的十六进制和SASS形式进行检查,应该使用什么命令?

可以使用命令
cuobjdump -sass -ptx mykernel.cubin
将可执行文件以人类可读的十六进制和SASS形式进行检查。

62、使用英伟达的nvcc工具编译并运行
myptxhost.cu
文件,需要执行哪些步骤,会有什么结果?

使用英伟达的
nvcc
工具编译运行代码的指令为:

先使用命令编译:

bash nvcc myptxhost.cu -lcuda

再使用命令运行程序:

bash ./a.out

运行后会在主机终端看到输出结果。

63、尝试进行SASS编程甚至编写英伟达机器代码,有哪些相关资源?

如果你想尝试进行 SASS 编程,甚至编写英伟达机器代码,有很多资源可供利用。在 https://github.com/daadaada/turingas 能找到适用于 Volta、Turing 和 Ampere 架构的 SASS 汇编器,该网站还有代码示例和其他架构汇编器的链接。

英伟达官网提供了:

SASS 调试工具 GPU 模拟器 SASS 助记符含义列表 (但不包含参数和语义)

部分第三方 SASS 汇编器有实用的示例程序。

64、从https://github.com/charles – fox/qcf下载QCF,并完成量子架构相关示例操作(如创建非叠加寄存器状态、模拟叠加状态、模拟测量等)

由于无法直接执行下载和操作步骤,你可以按照以下步骤完成:

打开浏览器,访问 https://github.com/charles-fox/qcf ; 在该页面找到下载按钮或克隆仓库的指令,将 QCF 下载到本地; 打开相关编程环境(如支持 QCF 运行的环境),根据量子架构相关示例代码进行操作,例如创建非叠加寄存器状态、模拟叠加状态、模拟测量等。

65、请概括出打开台式电脑查看内部组件的步骤和注意事项

步骤:

购买一套小螺丝刀; 若对使用螺丝刀技能不放心,可先在旧设备上练习或搜索打开类似设备的视频; 打开台式电脑机箱; 识别主要组件(电源、主板、CPU、内存、显卡和通信设备)。

注意事项:

打开机箱可能使设备保修失效; 只打开机箱,不要触碰任何电路板。

© 版权声明

相关文章

暂无评论

none
暂无评论...