你好,我是一个汇编新手(今天刚开始),在做this tutorial中所说的事情时遇到了这个问题。我用这个文本创建了一个asm文件:
bits 16
org 0x7c00
jmp Main
:In= si = string, ah = 0eh, al = char, Out= character screen
Print:
lodsb
cmp al, 0
je Done
mov ah, 0eh
int 10h
jmp Print
Done:
ret
Main
mov si, msg
call Print
cls
hlt
msg db "Hello World",0
times 510 - ($-$$) db 0
dw 0xAA55
字符串
在我的asm文件夹中,我有一个nasm和nasmpath的副本,我也有一个到bochs的快捷方式。我想做的是把它转换成一个bin文件。当我把这个命令:
nasm -f bin boot.asm -o boot.bin
型
我得到这个错误
boot.asm:5: error: label or instruction expected at the start of line
型
我想知道这是一个糟糕的教程还是我输入错误的东西。我也想知道“标签或说明”是什么意思。
3条答案
按热度按时间pieyvz9o1#
[org 0x0100]
jmp启动
截面数据
name db'Name:Ali shan',0
vuid db'VUID:bc210410288',0
vuid_asc db'vuid sorted:001122488',0 vuid_desc db'vuid sorted:884221100',0
Current_values db vuid-vuid
节文本开始; mov ah,0 mov al,3 int 0x10
mov ah,0x0e mov si,name call print_string_color
mov al,0x0d int 0x10 mov al,0x0a int 0x10 mov si,current_values调用print_string_color
mov ax,0 mov es,ax cli mov word[es:9*4],kbisr mov [es:9*4+2],cs sti l1:mov ah,0 int 0x16 cmp al,27 jne l1 mov ax,0x4c00 int 0x21
kbisr:push ax push es mov ax,0xb800 mov es,ax in al,0x60 cmp al,0x2a je.left_shift_pressed cmp al,0x36 je.right_shift_pressed
mov ax,0 int 0x10 jmp.end
.left_shift_pressed:mov ax,0 int 0x10 mov ah,0x0e mov si,name call print_string_color
mov al,0x0d int 0x10 mov al,0x0a int 0x10 mov si,vuid调用print_string_color
mov al,0x0d int 0x10 mov al,0x0a int 0x10 mov si,vuid_desc call print_string_color
jmp end .right_shift_pressed:mov ax,0 int 0x10 mov ah,0x0e mov si,name call print_string_color
mov al,0x0d int 0x10 mov al,0x0a int 0x10
mov si,vuid call print_string_color mov al,0x0d int 0x10 mov al,0x0a int 0x10
mov ah,0x0e mov si,vuid_asc调用print_string_color
.end:mov al,0x20 out 0x20,al pop es pop ax iret print_string_color:lodsb cmp al,0 je.done mov ah,0x0e mov bh,0 int 0x10 jmp priny_string_color
.done:ret
9gm1akwq2#
在第5行中使用注解。要将一行标记为注解,需要使用分号。“标签或指令”意味着每一行必须是指令(如mov、add等操作码),或者它必须是标签(如Print:)或后面跟着指令的标签。
ekqde3dh3#
您还应该将冒号放在Main和cls之后
字符串