|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 chunhuaqiuyue 于 2021-12-26 22:33 编辑
assume cs:code,ds:data
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 ch,2
call show_str
mov ax,4c00h
int 21h
dtoc:
mov di,10
s0:
mov dx,0
div di ;商存放在ax中,余数存放在dx中
mov cx,ax ;商存放在cx中,用来判断除法结束
add dx,30h
mov [si],dl ;将ASCII码保存,注意与数据对应位置是逆序排放
inc si
jcxz ok
jmp short s0
show_str:
mov ax,0b800h ; set to screen start position
mov es,ax
mov bl,dl ; 解决 后面 30行 mul 后 ,bx会因为保存乘法高位而被置0的问题; 所以先把值存入bl
mov bh,0
mov dl,0
mov dl,dh
mov dh,0
mov ax,160 ; 160 bytes per row; 因为一行80个列,每一列 是 16位组成,低8位代表字符 高8位代表颜色属性
mul dx
add bx,bx ; mul 2 ; 原因和29行一样
add ax,bx
mov bx,ax
mov ax,cx
mov cx,0
show_str_s:
mov al,ds:[si]
mov cx,si
mov es:[bx],ax
jcxz ok
sub si,1
add bx,2
jmp short show_str_s
ok: ret
code ends
end start |
|