我现在在学习李忠的《x86汇编语言-从实模式到保护模式》
编译器是nasm
1.在某程序中声明和初始化了以下的有符号数。请问,正数和负数各有多少?
data1 db 0x05,0xff,0x80,0xf0,0x97,0x30
data2 dw 0x90,0xfff0,0xa0,0x1235,0x2f,0xc0,0xc5bc
2.如果可能的话,尝试编写一个主引导扇区程序来做上面的工作。
jmp near start
data1 db 0x05,0xff,0x80,0xf0,0x97,0x30
data2 dw 0x90,0xfff0,0xa0,0x1235,0x2f,0xc0,0xc5bc
start:
mov ax,0x7c0
mov ds,ax
mov si,data1
xor bx,bx ;bh负,bl全
mov cx,data2-data1
@a:mov al,[ds:si]
cmp al,0x80
jb @b
inc bh
@b:inc bl
inc si
loop @a
mov cx,(start-data2)/2
@c:mov ax,[ds:si]
cmp ah,0x80
jb @d
inc bh
@d:inc si
inc si
inc bl
loop @c
sub bl,bh
add bl,0x30
add bh,0x30
mov ax,0xb800
mov es,ax
mov byte [es:0],'z'
mov byte [es:1],0x07
mov byte [es:2],':'
mov byte [es:3],0x07
mov [es:4],bl
mov byte [es:5],0x07
mov byte [es:8],'f'
mov byte [es:9],0x07
mov byte [es:10],':'
mov byte [es:11],0x07
mov [es:12],bh
mov byte [es:13],0x07
jmp near $
times 510-($-$$) db 0
db 0x55,0xaa