1. 显示字符串
assume cs:code, ds:data, ss:stack
data segment
db 'Welcome to masm!', 0
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start: mov dh, 8
mov dl, 3
mov cl, 2
mov ax, data
mov ds, ax
mov si, 0
mov ax, stack
mov ss, ax
mov sp, 10h
call show_str
mov ax, 4c00h
int 21h
show_str: push cx
push dx
;列位置计算,放到di中
mov al, 2
mul dl
sub ax, 2
mov di, ax
;行位置计算,最后放到es中
mov al, 10
mul dh
mov dx, ax
mov ax, 1800h
add ax, dx
mov es, ax
;cx后面要用,把它给bl
mov bp, 0
mov bl, cl
invoke: mov ch, 0
mov cl, ds:[si]
jcxz ok
mov byte ptr es:[bp][di], cl
inc bp
mov byte ptr es:[bp][di], bl
inc bp
inc si
jmp short invoke
ok: pop dx
pop cx
ret
code ends
end start
2. 解决除法溢出问题
暂且搁置。
3. 数值显示
assume cs:code, ds:data, ss:stack
data segment
db 10 dup(0)
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:
mov ax, 12666
mov bx, data
mov ds, bx
mov si, 0
call dtoc
mov dh, 8
mov dl, 3
mov cl, 2
call show_str
mov ax, 4c00h
int 21h
dtoc:
push ax
push bx
mov bx, 10
mov bp, 0
push bp
hh: mov dx, 0
div bx
mov cx, dx ;余数
jcxz ll
push cx ;将有效的cx全入栈
jmp short hh
ll: pop cx ;将cx出栈
jcxz kk
add cx, 30h
mov byte ptr ds:[si], cl
inc si
jmp short ll
kk:
pop bx
pop ax
ret
show_str: push cx
push dx
;列位置计算,放到di中
mov al, 2
mul dl
sub ax, 2
mov di, ax
;行位置计算,最后放到es中
mov al, 10
mul dh
mov dx, ax
mov ax, 1800h
add ax, dx
mov es, ax
;cx后面要用,把它给bl
mov bp, 0
mov bl, cl
mov si, 0
invoke: mov ch, 0
mov cl, ds:[si]
jcxz ok
mov byte ptr es:[bp][di], cl
inc bp
mov byte ptr es:[bp][di], bl
inc bp
inc si
jmp short invoke
ok: pop dx
pop cx
ret
code ends
end start