OneCompiler

Assignment 6

315

;Write X86/64 ALP to switch from real mode to protected mode and display the values of
;GDTR, LDTR, IDTR, TR and MSW Registers.

section .data

msg1:db 'GDTR contents :',0xa
len1:equ $-msg1

msg2:db 'LDTR contents:',0xa
len2:equ $-msg2

msg3:db 'IDTR contents :',0xa
len3:equ $-msg3

msg4:db 'TR contents:',0xa
len4:equ $-msg4

msg5:db 'MSW contents:',0xa
len5:equ $-msg5

msg6:db 'We are in protected mode.!!',0xa
len6:equ $-msg6

msg7:db ' ',0xa
len7:equ $-msg7

msg8:db 'We are not in protected mode.!!',0xa
len8:equ $-msg8

msg9:db ' : ',0xa
len9:equ $-msg9

section .bss

gdt:resd 01
resw 01
ldt:resw 01
idt: resd 01
resw 01
tr:resw 01
msw:resw 01

result: resw 01

section .text

global _start
_start:

smsw [msw]
sgdt [gdt]
sldt [ldt]
sidt [idt]
str [tr]

mov ax,[msw]
bt ax,0
jc next
mov rax,1
mov rdi,1
mov rsi,msg8
mov rdx,len8
syscall
jmp exit

next:
mov rax,1
mov rdi,1
mov rsi,msg6
mov rdx,len6
syscall

;GDTR

mov rax,1
mov rdi,1
mov rsi,msg1
mov rdx,len1
syscall

mov bx,word[gdt+4]
call HtoA
mov bx,word[gdt+2]
call HtoA

mov rax,1
mov rdi,1
mov rsi,msg9
mov rdx,len9
syscall

mov bx,word[gdt]
call HtoA

;LDTR

mov rax,1
mov rdi,1
mov rsi,msg7
mov rdx,len7
syscall

mov rax,1
mov rdi,1
mov rsi,msg2
mov rdx,len2
syscall

mov bx,word[ldt]
call HtoA

;IDTR

mov rax,1
mov rdi,1
mov rsi,msg7
mov rdx,len7
syscall

mov rax,1
mov rdi,1
mov rsi,msg3
mov rdx,len3
syscall

mov bx,word[idt+4]
call HtoA
mov bx,word[idt+2]
call HtoA

mov rax,1
mov rdi,1
mov rsi,msg9
mov rdx,len9
syscall

mov bx,word[idt]
call HtoA

;TR

mov rax,1
mov rdi,1
mov rsi,msg7
mov rdx,len7
syscall

mov rax,1
mov rdi,1
mov rsi,msg4
mov rdx,len4
syscall

mov bx,word[tr]
call HtoA

;MSW

mov rax,1
mov rdi,1
mov rsi,msg7
mov rdx,len7
syscall

mov rax,1
mov rdi,1
mov rsi,msg5
mov rdx,len5
syscall

mov bx,word[msw]
call HtoA

;EXIT
exit:
mov rax,60
mov rdi,0
syscall

HtoA:
mov rcx,4
mov rdi,result
dup1:
rol bx,4
mov al,bl
and al,0fh
cmp al,09h
jg p3
add al,30h
jmp p4
p3: add al,37h
p4:mov [rdi],al
inc rdi
loop dup1

    mov rax,1

mov rdi,1
mov rsi,result
mov rdx,4
syscall

ret