编程,将data段中的数据以十进制形式显示出来
这道题目是三道题目之中最难的一道题,当然前面两道题目如果能理解了的话这道题目是不成问题的,show_str是可以复制前面的。
有点不同的是你保存字符串的数据区是6 6 6 2 1这样保存的,我们要倒过来录入。所以在录入后判断si是否为0就ok了。
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
call show_str
mov ax,4c00h
int 21h
dtoc:
mov ch,0
call set
ret
set:
mov bx,10
div bx
mov [si],dx
add byte ptr [si],30h
inc si
mov cx,ax
jcxz ok
mov dx,0
jmp short set
show_str: ;其实这是一个子程序,里面是包含s和ok的,这样理解容易些
dec si
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax ;计算出行和列加起来的偏移量
mov ax,0B800h
mov es,ax ;es:[bx]为要输入的显示区
mov al,2 ;颜色数值
s: ;判断是否为0,否就输入到显示区
mov cl,[si]
mov es:[bx],cl
mov es:[bx+1],al
add bx,2
mov cx,si
jcxz ok
dec si
jmp short s
ok: ;返回
ret
code ends
end start
这道题目不过多解释,如果你能搞点前面两道建议这道题目就自己敲吧