变成,将data段中的数据以十进制的形式显示出来
data segment
dw 123,12666,1,8,3,38
data ends
我写的程序具体是这样,写的很杂乱,但是我看过其他人写的程序,有很大的差别,注释也不太会写,所以注释很少,几乎没有,但是思路是对的,新手认真研究,但愿对你有所帮助
ok以上的代码是把数据变为字符串
ok一下的代码是把字符串显示到电脑屏幕上
具体思路就是先把16进制的字节转化为十进制的0-9,利用除法取余的方式,把余数加30h得到十进制ascll码,然后再把每组数据的余数通过入栈,然后再出栈到aa数据段,得到十进制的字符串,
得到十进制的字符串在显示到屏幕上
大致分为两步,第一步得到十进制的字符串(这个比较难,慢慢研究)
第二部把字符串显示到电脑屏幕上,(别忘记清屏在运行程序,之前一直没清屏就运行程序,显示不出来,我还以为程序写错了,cls是清屏)
assume cs:code
data segment
dw 123,12666,1,8,3,38
data ends
aa segment
db 12 dup(0)
aa ends
ios segment
dw 8 dup (0)
ios ends
code segment
start:
mov ax,data
mov ds,ax ;用ds代表data段地址
mov ax,aa
mov es,ax ;用es表示aa要写入的段地址
mov si,0 ;用si表示data的偏移地址
mov di,0 ;用di表示aa的偏移地址
mov bx,10 ;用bx表示除数10
mov ax,ios
mov ss,ax
mov sp,14
jmp short s1
s0:
pop ax
mov cx,ax
jcxz s1
mov es:[di],al
inc di
jmp short s0
s1:
mov ax,0
push ax
mov ax,ds:[si]
add si,2
mov cx,ax
jcxz ok
mov dx,0
s:
div bx
mov cx,dx
jcxz s0
add dx,30h
push dx
mov dx,0
jmp short s
ok:
mov dh,8
mov dl,3
mov cl,2
mov ax,aa
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
mov ax,0b800h
mov es,ax ;将es设置为0b800h
mov al,0a0h
mov ah,0
mul dh
mov bx,ax ;用bx表示第几行
add dl,dl
mov dh,0
mov di,dx ;用di表示第几列
mov dl,cl ;用dx表示颜色的数值
mov cx,0
s3:
mov cl,ds:[si]
jcxz s2
inc si
mov es:[bx+di],cl
inc di
mov es:[bx+di],dl
inc di
jmp short s3
s2:
ret
code ends
end start