您的位置:首页 > 其它

汇编语言(王爽)--实验10编写子程序

2018-04-03 19:18 309 查看

assume cs:code,ds:data
data segment
db 'welcome to masm!',0
data ends

code segment

start: mov dh,8
mov dl,1
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str

mov ax,4c00h
int 21h
;显示字符串函数 dh为行号dl为列号cl为颜色
show_str:mov bl,cl
push cx
push si

mov ax,0B800H
mov es,ax ;显存段地址进es

mov al,160 ;行号和列号的偏移地址准备就绪
mul dh
mov di,ax
mov al,2
mul dl
add di,ax

s:mov cl,ds:[si]
mov ch,0
jcxz ok ;到字符串末尾0跳到ok
mov es:[di],cl
mov es:[di+1],bl
add di,2
inc si
jmp s

ok:pop si
pop cx
ret

code ends

end start

assume cs:code,ss:stack

stack segment
dw 16 dup(0)
stack ends

code segment

start:mov ax,0ffffh ;低16位
mov dx,0fffh ;高16位
mov cx,0ah ;除数
call divdw

mov ax,4c00h
int 21h
;32位除法 结果:dx放搞16位,ax放低16位 cx放商
divdw:mov bx,ax ;低16位暂存

mov ax,dx
mov dx,0 ;dx ax
div cx ;0 被除数高16位
push ax ;商push

;(rem(H/N)*65536+L) /N
; 上一步的余 低16位 除数
mov ax,bx ; DX bx->ax cx
div cx
;事情做完
mov cx,dx ;DX余,ax商
pop bx
mov dx,bx
ret
code ends

end start




assume cs:code,ds:data,ss:stack

data segment
db 16 dup(0)
data ends

stack segment
db 16 dup(0)
stack ends

code segment
start:mov ax,34694
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
;将word型数据转变位表示十进制数的字符串,字符串以0为结尾符
;参数ax,写入ds:[si]
dtoc:push si
mov di,0
dtocs1:mov bx,10    ;16位除法
mov dx,0
div bx

add dx,30h ;数字是倒叙的,所以要利用栈后进先出的特性改顺序
push dx
inc di
mov cx,ax

jcxz dtocs2
jmp dtocs1
;正序
dtocs2:mov cx,di
dtocs3:pop ds:[si]
inc si
loop dtocs3

mov ds:[si],0  ;0结尾
pop si
ret
;;显示字符串函数  dh为行号dl为列号cl为颜色
show_str:mov bl,cl
push cx
push si

mov ax,0B800H
mov es,ax                 ;显存段地址进es

mov al,160          ;行号和列号的偏移地址准备就绪
mul dh
mov di,ax
mov al,2
mul dl
add di,ax

shows1:mov cl,ds:[si]
mov ch,0
jcxz showok          ;到字符串末尾0跳到ok
mov es:[di],cl
mov es:[di+1],bl
add di,2
inc si
jmp shows1

showok:pop si
pop cx
ret
code ends

end start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: