Tuesday, January 10, 2012

cs401 Computer Architecture and Assembly Language Programming assignment solution fall 2012

this is incomplete solution

[org 0x0100]
jmp start

oldisr: dd 0
op: dw 0
swap: db 0
loc: dw 0
locc: dw 0

data: dw 2, 1, 4, 3, 6, 5, 8, 7, 10, 9

;========================number printing====================

 

printnum:
 push bp
 mov bp, sp
 push es
 push ax
 push bx
 push cx
 push dx
 push di
 mov ax, 0xb800
 mov es, ax
 mov ax, [bp+4]
 mov bx, 10
 mov cx, 0
nextdigit:
 mov dx, 0
 div bx ; divide by 10
 add dl, 0x30
 push dx
 inc cx
 cmp ax, 0
 jnz nextdigit
 mov di, 0

nextpos:
 pop dx
 mov dh, 0x07
;================================================
 mov ax,[loc]
 mov ah,0
 mov si,ax
 mov [es:si], dx
 add ax,2
 mov [loc],ax
;======================================
 add di, 2
 loop nextpos
 pop di
 pop dx
 pop cx
 pop bx
 pop ax
 pop es
 pop bp
 ret 2

;=========================================================
uuu:
 mov word[data],2
 mov word[data+2],1
 mov word[data+4],4
 mov word[data+6],3
 mov word[data+8],6
 mov word[data+10],5
 mov word[data+12],8
 mov word[data+14],7
 mov word[data+16],10
 mov word[data+18],9
 mov word[op],1

ret
;=====================================================

kbisr:
 push ax
 push es

 in al, 0x60
;=======================================================
 cmp al, 0x1f
 jne nomatch
call uuu
;=======================================================


mov bx, [locc]



 




 

;=============================================
 mov bp,0

 


ll:
 mov ax, [data+bp]
 push ax
 call printnum

 add bp,2
 cmp bp,20
  jne ll


 


;====================================================


jmp exit
;============================================================

nomatch:
 pop es
 pop ax
 jmp far [cs:oldisr]

;==================================================================
exit:
 mov al, 0x20
 out 0x20, al
 pop es
 pop ax
 iret
;=======================================================
start:


 xor ax, ax
 mov es, ax
 mov ax, [es:9*4]
 mov [oldisr], ax
 mov ax, [es:9*4+2]
 mov [oldisr+2], ax

 cli
 mov word [es:9*4], kbisr
 mov [es:9*4+2], cs
 sti


 mov dx, start
 add dx, 15
 mov cl, 4
 shr dx, cl
 mov ax, 0x3100
 int 0x21

No comments:

Post a Comment