assume cs:codesg,ds:data,ss:stack
stack segment
dw 8 dup (0)
stack ends
data segment
db 'welcome to asm',0
data ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,8
mov bx,3
call ShowStr
mov ax,4c00h
int 21h
;para:ds,si
;row = ax,col = bx
;no return
ShowStr:
push di
push es
push ds
push si
push ax
push bx
push cx
;caculate address
mov di,0B800H
mov es,di
mov di,0A0H
mul di
add ax,bx
add ax,bx
mov bx,ax
Next:
mov cl,ds:[si]
mov ch,0
jcxz Ok
;show
mov al,ds:[si]
mov es:[bx],al
mov ax,0a0H
mov es:[bx+1],ax
add si,1
add bx,2
loop Next
OK:
pop cx
pop bx
pop ax
pop si
pop ds
pop es
pop di
ret
codesg ends
end start
stack segment
dw 8 dup (0)
stack ends
data segment
db 'welcome to asm',0
data ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,8
mov bx,3
call ShowStr
mov ax,4c00h
int 21h
;para:ds,si
;row = ax,col = bx
;no return
ShowStr:
push di
push es
push ds
push si
push ax
push bx
push cx
;caculate address
mov di,0B800H
mov es,di
mov di,0A0H
mul di
add ax,bx
add ax,bx
mov bx,ax
Next:
mov cl,ds:[si]
mov ch,0
jcxz Ok
;show
mov al,ds:[si]
mov es:[bx],al
mov ax,0a0H
mov es:[bx+1],ax
add si,1
add bx,2
loop Next
OK:
pop cx
pop bx
pop ax
pop si
pop ds
pop es
pop di
ret
codesg ends
end start