汇编网首页登录博客注册
2746035325的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
最新评论
最新留言
好友圈
友情链接

[2020-06-29 16:01] 实验十-3

assume cs:code

data segment
db 10 dup (0)
data 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 bx
push cx
push dx
push si

;-------------------------------------
input:
mov dx,0           ;这一句必须在input段内
mov bx,10
div bx               ;dx和ax被修改,dx非零
mov cx,ax
add dx,30h       ;dx作为余数,加了30
mov [si],dx
jcxz over
inc si                ;这一行不能提前到jcxz,si最终为0004h
jmp short input
;----------------------
over:
pop si
pop dx
pop cx
pop bx
ret
;-----------------------------这样的写法的最终结果是66621,倒过来的,正过来的话就用栈就行了
show_str:
push ax
push bx
push cx
push dx
push es
push si
push di
;------------------------------------------
mov ax,0b800h
mov es,ax
;之前最大的问题在于我没有被bx清零这里弄好,导致先把行字节存入之后,有把bx清零了,然后就显示不出来
mov al,0a0h
mul dh
mov bx,ax        ;行字节

mov dh,0
add dx,dx
mov di,dx         ;列字节

mov dl,cl
mov ch,0
;------------------------------------------
show:
;------------
mov cl,[si]        ;cx内为字符或为字符最后的0
jcxz ok             ;若cx不为0则顺序执行,为0则跳转到ok标记
;------------
mov es:[di+bx],cl
inc di
mov es:[di+bx],dl
inc di
inc si                  ;si代表data内的字符位置,在打印过程中不应当清零,每次增一字节,第一次存字符,第二次存属性
jmp short show      ;循环打字
;-----------
ok:
pop di
pop si
pop es
pop dx
pop cx
pop bx
pop ax
ret                     ;当cl从[si]取得0时就代表字符串打完了
;-------------------------------------
code ends
end start
评论次数(0)  |  浏览次数(401)  |  类型(默认类型) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码