honeypot 发表于 2022-9-12 20:04:52

Learn x86 protected mode assembly language-c06_mbr.asm

         ;代码清单6-1
         ;文件名:c06_mbr.asm
         ;文件说明:硬盘主引导扇区代码
         ;创建日期:2011-4-12 22:12
      
         jmp near start
         
mytext db 'L',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,' ',0x07,'o',0x07,\
            'f',0x07,'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07
number db 0,0,0,0,0

start:
         mov ax,0x7c0                  ;设置数据段基地址
         mov ds,ax
         
         mov ax,0xb800               ;设置附加段基地址
         mov es,ax
         
         cld
         mov si,mytext               
         mov di,0
         mov cx,(number-mytext)/2      ;实际上等于 13
         rep movsw
   
         ;得到标号所代表的偏移地址
         mov ax,number
         
         ;计算各个数位
         mov bx,ax
         mov cx,5                      ;循环次数
         mov si,10                     ;除数
digit:
         xor dx,dx
         div si
         mov ,dl                   ;保存数位
         inc bx
         loop digit
         
         ;显示各个数位
         mov bx,number
         mov si,4                     
   show:
         mov al,
         add al,0x30
         mov ah,0x04
         mov ,ax
         add di,2
         dec si
         jns show
         
         mov word ,0x0744

         jmp near $

times 510-($-$$) db 0
                   db 0x55,0xaa



   1                                           ;代码清单6-1
   2                                           ;文件名:c06_mbr.asm
   3                                           ;文件说明:硬盘主引导扇区代码
   4                                           ;创建日期:2011-4-12 22:12
   5                                       
   6 00000000 E91F00                           jmp near start
   7                                          
   8 00000003 4C076107620765076C-       mytext db 'L',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,' ',0x07,'o',0x07,            'f',0x07,'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07
   9 0000000C 0720076F0766076607-
    10 00000015 7307650774073A07   
    11 0000001D 0000000000                number db 0,0,0,0,0
    12                                    
    13                                    start:
    14 00000022 B8C007                           mov ax,0x7c0                  ;设置数据段基地址
    15 00000025 8ED8                           mov ds,ax
    16                                          
    17 00000027 B800B8                           mov ax,0xb800               ;设置附加段基地址
    18 0000002A 8EC0                           mov es,ax
    19                                          
    20 0000002C FC                               cld
    21 0000002D BE                         mov si,mytext               
    22 00000030 BF0000                           mov di,0
    23 00000033 B90D00                           mov cx,(number-mytext)/2      ;实际上等于 13
    24 00000036 F3A5                           rep movsw
    25                                       
    26                                           ;得到标号所代表的偏移地址
    27 00000038 B8                         mov ax,number
    28                                          
    29                                           ;计算各个数位
    30 0000003B 89C3                           mov bx,ax
    31 0000003D B90500                           mov cx,5                      ;循环次数
    32 00000040 BE0A00                           mov si,10                     ;除数
    33                                    digit:
    34 00000043 31D2                           xor dx,dx
    35 00000045 F7F6                           div si
    36 00000047 8817                           mov ,dl                   ;保存数位
    37 00000049 43                               inc bx
    38 0000004A E2F7                           loop digit
    39                                          
    40                                           ;显示各个数位
    41 0000004C BB                         mov bx,number
    42 0000004F BE0400                           mov si,4                     
    43                                     show:
    44 00000052 8A00                           mov al,
    45 00000054 0430                           add al,0x30
    46 00000056 B404                           mov ah,0x04
    47 00000058 268905                           mov ,ax
    48 0000005B 83C702                           add di,2
    49 0000005E 4E                               dec si
    50 0000005F 79F1                           jns show
    51                                          
    52 00000061 26C7054407                     mov word ,0x0744
    53                                 
    54 00000066 E9FDFF                           jmp near $
    55                                 
    56 00000069 00<rept>                  times 510-($-$$) db 0
    57 000001FE 55AA                                       db 0x55,0xaa



页: [1]
查看完整版本: Learn x86 protected mode assembly language-c06_mbr.asm