Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Assembly Language Programming (ALP) Forum (http://www.go4expert.com/forums/assembly-language-programming-forum/)
-   -   Understanding Assembly Code (http://www.go4expert.com/forums/understanding-assembly-code-t29671/)

Unity 15May2013 01:35

Understanding Assembly Code
 
Hi,

My knowledge regarding assembly code is very limited and I wanted to ask if someone could help figure out what the following is doing? There is a routine that calls the disk (this is code loaded directly by BIOS) and I would like to know where this is and how it is executed:

Code:

//allow interrupts
:0000                cli
//ax=0
:0001                xor      ax, ax
//ss=ax(=0)
:0003                mov    ss, ax
//sp=0x7c00
:0005                mov    sp, 7C00h
//si=sp
:0008                mov    si, sp
//es=ax(=0)
:000A                push    ax
:000B                pop    es
//ds=ax(=0)
:000C                push    ax
:000D                pop    ds
:000E                sti
:000F                cld
//di=0x600
//cx=0x100
:0010                mov    di, 600h
:0013                mov    cx, 100h
:0016                rep movsw
//
//
:0018                jmp    far ptr 0:61Dh
//dh=0
//cx=2
//di=5
:001D                mov    dh, 0
:001F                mov    cx, 2
:0022                mov    di, 5
:0025
:0025 loc_25:     
//bx=0x700
//ax=0x201                       
:0025                mov    bx, 700h
:0028                mov    ax, 201h
//di=16 bit destination register
:002B                push    di
// AX= AH | AL=0x201
// CX=CH | CL = 2
//AL=1=> number of sector to read =1
//AH=2 => int 13h will be READ SECTORS INTO MEMORY
// CH=track=0
// CL= sector = 2
//this code reads the second sector, that is to say the data from 0x200 to 0x3FE.
:002C                int    13h            ; DISK - READ SECTORS INTO MEMORY
:002C                                        ; AL = number of sectors to read, CH = track, CL = sector
:002C                                        ; DH = head, DL = drive, ES:BX -> buffer to fill
:002C                                        ; Return: CF set on error, AH = status, AL = number of sectors read
:002E                pop    di
//will jump if CF=0
:002F                jnb    short loc_3D
//ax=0
//CX=3 => track=0 and sector =3
:0031                xor    ax, ax
// AL=AH=0
//the disk is reseted
:0033                int    13h            ; DISK - RESET DISK SYSTEM
:0033                                        ; DL = drive (if bit 7 is set both hard disks and floppy disks reset)
//di--
//the destination counter is decremented
:0035                dec    di
//jump if ZF is set
//untill di=0 we loop
:0036                jnz    short loc_25
//end of loop, di=0
//si=source index
//si=0x68A
:0038                mov    si, 68Ah
//jump to next block
:003B                jmp    short loc_78
:003D ; ---------------------------------------------------------------------------
:003D
:003D loc_3D:                     
//cx=3
:003D                mov    cx, 3
:0040
:0040 loc_40:                                ; DATA XREF: :0083#r
:0040                mov    di, 5
:0043
:0043 loc_43:                                ; CODE XREF: :0059#j
:0043                mov    bx, 2000h
:0046                push    bx
:0047                pop    es
:0048                assume es:nothing
:0048                mov    bx, 0
:004B                mov    ax, 220h        ; DATA XREF: :002C#r
:004B                                        ; :0033#r ...
:004E                push    di
:004F                int    13h            ; DISK - READ SECTORS INTO MEMORY
:004F                                        ; AL = number of sectors to read, CH = track, CL = sector
:004F                                        ; DH = head, DL = drive, ES:BX -> buffer to fill
:004F                                        ; Return: CF set on error, AH = status, AL = number of sectors read
:0051                pop    di
:0052                jnb    short loc_60
:0054                xor    ax, ax
:0056                int    13h            ; DISK - RESET DISK SYSTEM
:0056                                        ; DL = drive (if bit 7 is set both hard disks and floppy disks reset)
:0058                dec    di
:0059                jnz    short loc_43
:005B                mov    si, 68Ah
:005E                jmp    short loc_78
:0060 ; ---------------------------------------------------------------------------
:0060
:0060 loc_60:                                ; CODE XREF: :0052#j
:0060                mov    cx, 3FFFh
:0063                mov    si, 800h
:0066                xor    di, di
:0068
:0068 loc_68:                                ; CODE XREF: :0071#j
:0068                lodsw
:0069                and    si, 0FFBFh
:006C                xor    ax, es:[di]
:006F                stosw
:0070                dec    cx
:0071                jnz    short loc_68
:0073                jmp    far ptr 2000h:0
:0078 ; ---------------------------------------------------------------------------
:0078
:0078 loc_78:                                ; CODE XREF: :003B#j
:0078                                        ; :005E#j ...
:0078                lodsb
:0079                cmp    al, 0
:007B                jz      short loc_88
:007D                push    si
:007E                mov    bx, 7
:0081                mov    ah, 0Eh
:0083                int    10h            ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
:0083                                        ; AL = character, BH = display page (alpha modes)
:0083                                        ; BL = foreground color (graphics modes)
:0085                pop    si
:0086                jmp    short loc_78
:0088 ; ---------------------------------------------------------------------------
:0088
:0088 loc_88:                                ; CODE XREF: :007B#j
:0088                                        ; :loc_88#j
:0088                jmp    short loc_88
:008A ; ---------------------------------------------------------------------------

If more information is needed Ill try my best to provide as much detail as possible.

Thanks!

Unity 15May2013 16:19

Re: Understanding Assembly Code
 
Can a mod please move this to the assembly code section, thanks.

shabbir 15May2013 16:32

Re: Understanding Assembly Code
 
Quote:

Originally Posted by Unity (Post 99586)
Can a mod please move this to the assembly code section, thanks.

Done.


All times are GMT +5.5. The time now is 06:09.