数值显示的问题
53讲第三道题,数值12666转换成ASCII码,再显示出来,我发现S1段,第五次除法做完之后,没有执行 jmp short s1, 而是直接跳到下一段S2,执行mov cx,bx ,程序有点问题,下面列出小甲鱼的完整的代码 assume cs:code,ds:datadata segment;存入修改好的字符
db 10 dup(0)
data ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc;实现将word型整数转化为ASCII字符串并存储
mov dh,8 ;屏幕上显示的位置
mov dl,3
mov cl,0cah
call show_str ;打印字符串
mov ax,4c00h
int 21h
dtoc:push dx;数值显示的子程序定义
push cx
push ax
push si
push bx
mov bx,0 ;BX在子程序中存放位数,用栈来临时存放修改后的字符
s1:mov cx,10d
mov dx,0
div cx ;除以十
mov cx,ax ;得到的商1266赋给CX
jcxz s2 ;当商为0则跳到S2
add dx,30h ;将余数加上30H得到相应的ASCII码
push dx
inc bx
jmp short s1
s2: add dx,30h ;当商为0,余数为个位
push dx
inc bx
mov cx,bx
mov si,0
s3:pop ax ;将栈中的数据依次出栈放到指定内存中
mov ,al
inc si
loop s3
okay: pop bx
pop si
pop ax
pop cx
pop dx
ret ;数值显示的子程序结束
show_str:
push bx
push cx
push si
mov al,0a0h
dec dh
mul dh ;每行160字节乘行数的结果放入AX
mov bx,ax
mov al,2 ;第一个字节放字符,第二个字节放属性,
mul dl ;相乘得到每个要显示字符的位置
sub ax,2 ;从第三列开始显示,减2
add bx,ax ;最后确定的位置
mov ax,0B872h
mov es,ax
mov di,0
mov al,cl
mov ch,0
s:mov cl,ds:
jcxz ok
mov es:,cl
mov es:,al
inc si
add di,2
jmp short s
ok:pop si
pop cx
pop bx
ret
code ends
end start
@人造人 汇编交给你了 lumber2388779 发表于 2017-5-8 10:04
@人造人 汇编交给你了
^_^ 不明白你想问什么
页:
[1]