Advertisement
Guest User

Self-printing MBR

a guest
May 22nd, 2020
591
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. bits 16
  2. section .text
  3. org 7c00h
  4. start:  mov ax, 0b800h
  5.         mov ds, ax
  6.         mov ax, 0
  7.         mov es, ax
  8.         mov bx, 80*25*2
  9.         mov ax, 0200h
  10. clear:  mov [bx], ax
  11.         sub bx, 2
  12.         jnz clear
  13.         mov cx,msglen
  14.         mov bx,0
  15.         mov bp,msg
  16.         mov ah,02h
  17. .msgprnt:
  18.         mov al,[bp]
  19.         inc bp
  20.         mov [bx],ax
  21.         add bx,2
  22.         loop    .msgprnt
  23.  
  24.         mov dx, 1
  25.         mov bp, 7c00h
  26. looout:
  27.         mov     bx, dx
  28.         mov     ax,160
  29.         mul     bl
  30.         mov     bx, ax
  31.         mov     ax, dx
  32.         dec     ax
  33.         shl     ax,4
  34.         call    printax
  35.         mov byte [bx],':'
  36.         add bx, 4
  37.         mov cx,8
  38. looin:    mov ax, [es:bp]
  39.         call    printax
  40.         add bx,2
  41.         add bp, 2
  42.         mov al, [es:bp]
  43.         loop looin
  44.         inc dx
  45.         cmp dx,24
  46.         jb  looout
  47.  
  48.         shr bx,1
  49.  
  50.         mov dx, 0x03d4
  51.         mov al, 0x0f
  52.         out dx, al
  53.  
  54.         inc dl
  55.         mov al, bl
  56.         out dx, al
  57.  
  58.         dec dl
  59.         mov al, 0x0e
  60.         out dx, al
  61.  
  62.         inc dl
  63.         mov al, bh
  64.         out dx, al
  65. .hlt
  66.         hlt
  67.         jmp .hlt
  68. printax:
  69.         push    cx
  70.         push    si
  71.         mov     cx, 4
  72.         mov     si,ax
  73. .prloop:
  74.         push    cx
  75. .shrloop:
  76.         dec     cx
  77.         jz      .shrend
  78.         shr     ax,4
  79.         jmp     .shrloop
  80. .shrend:
  81.         pop     cx
  82.         and     al,0fh
  83.         cmp     al,10
  84.         jae     .hex
  85.         add     al, '0'
  86.         jmp     .continue
  87. .hex:   add     al, 'A'-10
  88. .continue:
  89.         mov     ah,02h
  90.         mov     [bx],ax
  91.         add     bx,2
  92.         mov     ax,si
  93.         loop    .prloop
  94.         pop     si
  95.         pop     cx
  96.         ret
  97. msg:    db      "Print itself and halt:"
  98. msglen  equ $-msg
  99. size    equ $-start
  100.         times 510-size db 0
  101.         dw      0aa55h
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement