; OUTPUT of pascal compiler by Naser Abbasi ; CSE565 Oakland University April 1988 lf EQU 0aH cr EQU 0dH doscall EQU 21h ; dos interupt routine st_seq segment byte stack ;define stack segment db 20 dup (?) st_seq ends ;------------------------------------------- code segment byte public ; define code seqment test1 proc far assume cs:code Start: push ds ;save old value sub ax,ax ;put zero in ax push ax ;save it on stack ; move number on stack mov ax, 0dH push ax ; resolve lhs refernce mov ax,BP- 4 ; perform assignment POP bx MOV ax,bx ; resolve rhs refernce mov ax,-4[BP] push ax ; generate call argumnet allready on stack CALL putc ; move number on stack mov ax, 0aH push ax ; resolve lhs refernce mov ax,BP- 4 ; perform assignment POP bx MOV ax,bx ; resolve rhs refernce mov ax,-4[BP] push ax ; generate call argumnet allready on stack CALL putc ; push char on stack mov ax,72 PUSH ax ; generate call argumnet allready on stack CALL putc ; push char on stack mov ax,105 PUSH ax ; generate call argumnet allready on stack CALL putc ; push char on stack mov ax,33 PUSH ax ; generate call argumnet allready on stack CALL putc ; move number on stack mov ax, 0dH push ax ; resolve lhs refernce mov ax,BP- 4 ; perform assignment POP bx MOV ax,bx ; resolve rhs refernce mov ax,-4[BP] push ax ; generate call argumnet allready on stack CALL putc ; move number on stack mov ax, 0aH push ax ; resolve lhs refernce mov ax,BP- 4 ; perform assignment POP bx MOV ax,bx ; resolve rhs refernce mov ax,-4[BP] push ax ; generate call argumnet allready on stack CALL putc ; push the value of variable on stack mov ax,0 push ax ; resolve lhs refernce mov ax,BP- 2 ; perform assignment POP bx MOV ax,bx ; code for while stmt lab1: ;Test for While Loop ; push the value of variable on stack mov ax,9 push ax ; resolve rhs refernce mov ax,-2[BP] push ax ;---- resolve le ; leave ax=1 on true, ax=0 on false POP ax POP bx CMP ax,bx JG lab3 ; jump on greater than mov ax,1 ; test passed JMP lab4 lab3: mov ax,0 ;test failed lab4: mov dx,1 cmp ax,dx JL lab2 ; Body of While Loop ; push the value of variable on stack mov ax, 30H push ax ; resolve rhs refernce mov ax,-2[BP] push ax ; perform addition POP ax POP bx ADD ax,bx push ax ; resolve lhs refernce mov ax,BP- 4 ; perform assignment POP bx MOV ax,bx ; resolve rhs refernce mov ax,-4[BP] push ax ; generate call argumnet allready on stack CALL putc ; push the value of variable on stack mov ax,1 push ax ; resolve rhs refernce mov ax,-2[BP] push ax ; perform addition POP ax POP bx ADD ax,bx push ax ; resolve lhs refernce mov ax,BP- 2 ; perform assignment POP bx MOV ax,bx JMP lab1 lab2: ; move number on stack mov ax, 0dH push ax ; resolve lhs refernce mov ax,BP- 4 ; perform assignment POP bx MOV ax,bx ; resolve rhs refernce mov ax,-4[BP] push ax ; generate call argumnet allready on stack CALL putc ; move number on stack mov ax, 0aH push ax ; resolve lhs refernce mov ax,BP- 4 ; perform assignment POP bx MOV ax,bx ; resolve rhs refernce mov ax,-4[BP] push ax ; generate call argumnet allready on stack CALL putc ret ;go back to OS test1 endp ;------------------------------------- putc proc near push bp ;save bp mov bp,sp ;set up stak frame sub sp, 0 ;allocate frame ; resolve rhs refernce mov ax, 2[BP] push ax POP ax ; get char from the stack INT doscall ; output it mov sp,bp ;deallocate local variables pop bp ;restore old value of bp RET 2 putc endp ;-------------------------------------------- ;------------------------------------ code ENDS end start