请选择 进入手机版 | 继续访问电脑版

4Ameta

 找回密码
 立即注册
搜索
查看: 61|回复: 0

Learn x86 protected mode assembly language-c06_mbr.asm

[复制链接]

26

主题

26

帖子

119

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119
发表于 2022-9-12 20:04:52 | 显示全部楼层 |阅读模式
  1.          ;代码清单6-1
  2.          ;文件名:c06_mbr.asm
  3.          ;文件说明:硬盘主引导扇区代码
  4.          ;创建日期:2011-4-12 22:12
  5.       
  6.          jmp near start
  7.          
  8.   mytext db 'L',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,' ',0x07,'o',0x07,\
  9.             'f',0x07,'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07
  10.   number db 0,0,0,0,0
  11.   
  12.   start:
  13.          mov ax,0x7c0                  ;设置数据段基地址
  14.          mov ds,ax
  15.          
  16.          mov ax,0xb800                 ;设置附加段基地址
  17.          mov es,ax
  18.          
  19.          cld
  20.          mov si,mytext                 
  21.          mov di,0
  22.          mov cx,(number-mytext)/2      ;实际上等于 13
  23.          rep movsw
  24.      
  25.          ;得到标号所代表的偏移地址
  26.          mov ax,number
  27.          
  28.          ;计算各个数位
  29.          mov bx,ax
  30.          mov cx,5                      ;循环次数
  31.          mov si,10                     ;除数
  32.   digit:
  33.          xor dx,dx
  34.          div si
  35.          mov [bx],dl                   ;保存数位
  36.          inc bx
  37.          loop digit
  38.          
  39.          ;显示各个数位
  40.          mov bx,number
  41.          mov si,4                     
  42.    show:
  43.          mov al,[bx+si]
  44.          add al,0x30
  45.          mov ah,0x04
  46.          mov [es:di],ax
  47.          add di,2
  48.          dec si
  49.          jns show
  50.          
  51.          mov word [es:di],0x0744

  52.          jmp near $

  53.   times 510-($-$$) db 0
  54.                    db 0x55,0xaa
复制代码



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

复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|4ameta

GMT+8, 2022-10-3 00:05 , Processed in 0.038410 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表