ASM 初学小结

博主在学习ASM汇编语言后,尝试编写了一个硬盘主引导扇区程序,并在VirtualBox中成功运行。文章介绍了程序的实现过程,强调了ds段寄存器的初始值和显存地址的重要性。通过这次实践,博主收获了宝贵的调试经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前看了王爽的《汇编语言》,最近正学习《x86汇编语言 从实模式到保护模式》(李忠)。学习了基本的语法和内存寻址、显存读写等知识后,迫不及待地写了一个硬盘主引导扇区程序。写入VirtualBox后截屏如下(花里胡哨警告):
截屏
首先跳过数据到start。由于是主引导扇区代码,所以ds为0x7c00(最开始程序被加载到这里,这点很重要!),es为显存段地址(0xb800~0xffff)。bx为数据偏移地址,bp为显存偏移地址。循环读写。硬盘扇区规范,最后两个字节为0x55 0xaa。详见代码:

	; exercise.asm
	; Coco 07
	; 2020.3.4 12:52

	jmp start

	string db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz','0123456789','+-*/<=>{[()]},.?!#_&|%@',0
start:	mov ax,0x7c0
	mov ds,ax
	mov ax,0xb800
	mov es,ax
	mov bx,0
	mov bp,0
	mov dl,0
s:	mov byte al,[string+bx]
	inc bx
	cmp al,0
	jne con
	mov bx,0
con mov byte [es:bp],al
	inc bp
	mov byte [es:bp],dl
	inc dl
	inc bp
	jmp s

	times 510-($-$$) db 0
	dw 0xaa55

这个程序确实太简单了。不过,它既是一小步,更是我的一大步。编写和调试它的过程中,我获得了许多经验。祝自己汇编语言学习顺利!

附:

  1. 写代码:Visual Studio Code
  2. 编译:NASM
  3. 写入VHD:fixvhdw21
  4. 调试:Bochs-2.1.1
  5. 运行:Oracle VM VirtualBox

  1. fixvhdwr是《x86汇编语言 从实模式到保护模式》的附书工具,作者今天(2020.3.10)发布了新版本。这个据说是使用Delphi 7.0开发的,比较简陋,但网络上似乎并没有可替代的软件 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值