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

4Ameta

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

Learn x86 protected mode assembly language-c07_mbr.asm

[复制链接]

26

主题

26

帖子

119

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119
发表于 2022-9-12 20:07:09 | 显示全部楼层 |阅读模式
  1.          ;代码清单7-1
  2.          ;文件名:c07_mbr.asm
  3.          ;文件说明:硬盘主引导扇区代码
  4.          ;创建日期:2011-4-13 18:02
  5.          
  6.          jmp near start
  7.         
  8. message db '1+2+3+...+100='
  9.         
  10. start:
  11.          mov ax,0x7c0           ;设置数据段的段基地址
  12.          mov ds,ax

  13.          mov ax,0xb800          ;设置附加段基址到显示缓冲区
  14.          mov es,ax

  15.          ;以下显示字符串
  16.          mov si,message         
  17.          mov di,0
  18.          mov cx,start-message
  19.      @g:
  20.          mov al,[si]
  21.          mov [es:di],al
  22.          inc di
  23.          mov byte [es:di],0x07
  24.          inc di
  25.          inc si
  26.          loop @g

  27.          ;以下计算1到100的和
  28.          xor ax,ax
  29.          mov cx,1
  30.      @f:
  31.          add ax,cx
  32.          inc cx
  33.          cmp cx,100
  34.          jle @f

  35.          ;以下计算累加和的每个数位
  36.          xor cx,cx              ;设置堆栈段的段基地址
  37.          mov ss,cx
  38.          mov sp,cx

  39.          mov bx,10
  40.          xor cx,cx
  41.      @d:
  42.          inc cx
  43.          xor dx,dx
  44.          div bx
  45.          or dl,0x30            ;转ascii码
  46.          push dx
  47.          cmp ax,0
  48.          jne @d

  49.          ;以下显示各个数位
  50.      @a:
  51.          pop dx
  52.          mov [es:di],dl
  53.          inc di
  54.          mov byte [es:di],0x07
  55.          inc di
  56.          loop @a
  57.       
  58.          jmp near $
  59.       

  60. times 510-($-$$) db 0
  61.                  db 0x55,0xaa
复制代码
  1.      1                                           ;代码清单7-1
  2.      2                                           ;文件名:c07_mbr.asm
  3.      3                                           ;文件说明:硬盘主引导扇区代码
  4.      4                                           ;创建日期:2011-4-13 18:02
  5.      5                                          
  6.      6 00000000 E90E00                           jmp near start
  7.      7                                          
  8.      8 00000003 312B322B332B2E2E2E-      message db '1+2+3+...+100='
  9.      9 0000000C 2B3130303D         
  10.     10                                          
  11.     11                                   start:
  12.     12 00000011 B8C007                           mov ax,0x7c0           ;设置数据段的段基地址
  13.     13 00000014 8ED8                             mov ds,ax
  14.     14                                 
  15.     15 00000016 B800B8                           mov ax,0xb800          ;设置附加段基址到显示缓冲区
  16.     16 00000019 8EC0                             mov es,ax
  17.     17                                 
  18.     18                                           ;以下显示字符串
  19.     19 0000001B BE[0300]                         mov si,message         
  20.     20 0000001E BF0000                           mov di,0
  21.     21 00000021 B90E00                           mov cx,start-message
  22.     22                                       @g:
  23.     23 00000024 8A04                             mov al,[si]
  24.     24 00000026 268805                           mov [es:di],al
  25.     25 00000029 47                               inc di
  26.     26 0000002A 26C60507                         mov byte [es:di],0x07
  27.     27 0000002E 47                               inc di
  28.     28 0000002F 46                               inc si
  29.     29 00000030 E2F2                             loop @g
  30.     30                                 
  31.     31                                           ;以下计算1到100的和
  32.     32 00000032 31C0                             xor ax,ax
  33.     33 00000034 B90100                           mov cx,1
  34.     34                                       @f:
  35.     35 00000037 01C8                             add ax,cx
  36.     36 00000039 41                               inc cx
  37.     37 0000003A 83F964                           cmp cx,100
  38.     38 0000003D 7EF8                             jle @f
  39.     39                                 
  40.     40                                           ;以下计算累加和的每个数位
  41.     41 0000003F 31C9                             xor cx,cx              ;设置堆栈段的段基地址
  42.     42 00000041 8ED1                             mov ss,cx
  43.     43 00000043 89CC                             mov sp,cx
  44.     44                                 
  45.     45 00000045 BB0A00                           mov bx,10
  46.     46 00000048 31C9                             xor cx,cx
  47.     47                                       @d:
  48.     48 0000004A 41                               inc cx
  49.     49 0000004B 31D2                             xor dx,dx
  50.     50 0000004D F7F3                             div bx
  51.     51 0000004F 80CA30                           or dl,0x30
  52.     52 00000052 52                               push dx
  53.     53 00000053 83F800                           cmp ax,0
  54.     54 00000056 75F2                             jne @d
  55.     55                                 
  56.     56                                           ;以下显示各个数位
  57.     57                                       @a:
  58.     58 00000058 5A                               pop dx
  59.     59 00000059 268815                           mov [es:di],dl
  60.     60 0000005C 47                               inc di
  61.     61 0000005D 26C60507                         mov byte [es:di],0x07
  62.     62 00000061 47                               inc di
  63.     63 00000062 E2F4                             loop @a
  64.     64                                         
  65.     65 00000064 E9FDFF                           jmp near $
  66.     66                                         
  67.     67                                 
  68.     68 00000067 00<rept>                times 510-($-$$) db 0
  69.     69 000001FE 55AA                                     db 0x55,0xaa
复制代码


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2022-10-3 00:40 , Processed in 0.035827 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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