实验10第三个例题我这个程序那里有写错呢
请大神给解答一下这么写那里错了,为什么编译都是成功的就是的不到我要的执行结果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 cl, 2
call show_str
mov ax, 4C00h
int 21h
dtoc: mov cx, ax
mov dx, 0
jcxz ok
mov bx, 10
div bx
mov byte ptr ds:, dl
inc si
jmp short dtoc
ok: ret
show_str:mov ax, 0b800h
mov es, ax
mov al, 0A0H
mov ah, 0
dec dh
mul dh
mov bx, ax
mov al, 2
mov ah, 0
mul dl
sub ax, 2
add bx, ax
mov al, cl
mov ch, 0
mov ah, 0
mov di, 0
mov si, 0
kiss: mov cl, ds:
jcxz s
mov es:, cl
mov es:, al
inc si
add di, 2
jmp short kiss
s: ret
code ends
end start 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 cl, 2
call show_str
mov ax, 4C00h
int 21h
dtoc:
mov cx, ax
mov dx, 0
jcxz ok
mov bx, 10
div bx
add dl, '0'
mov byte ptr ds:, dl
inc si
jmp short dtoc
ok:
; 通过上面的循环得到的字符串顺序是倒序,下面翻转字符串
mov di, si
dec di
xor si, si
next:
cmp si, di
jge done
mov ah,
mov al,
mov , al
mov , ah
inc si
dec di
jmp next
done:
ret
show_str:
mov ax, 0b800h
mov es, ax
mov al, 0A0H
mov ah, 0
dec dh
mul dh
mov bx, ax
mov al, 2
mov ah, 0
mul dl
sub ax, 2
add bx, ax
mov al, cl
mov ch, 0
mov ah, 0
mov di, 0
mov si, 0
kiss:
mov cl, ds:
jcxz s
mov es:, cl
mov es:, al
inc si
add di, 2
jmp short kiss
s:
ret
code ends
end start
本帖最后由 奥普瓯江 于 2018-10-19 15:56 编辑
人造人 发表于 2018-10-19 12:46
难道不翻转就无法输出么?我想先以66621输出因为这个程序对我来说比较复杂,所以我先想一步一步来,我先输出这个数值,完了再进行翻转,但是我现在这个数值输出不了,麻烦大神给解释一下,麻烦了,
这里我想着是用站对他进行翻转 奥普瓯江 发表于 2018-10-19 15:53
难道不翻转就无法输出么?我想先以66621输出因为这个程序对我来说比较复杂,所以我先想一步一步来,我 ...
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 cl, 2
call show_str
mov ax, 4C00h
int 21h
dtoc:
mov cx, ax
mov dx, 0
jcxz ok
mov bx, 10
div bx
add dl, '0'
mov byte ptr ds:, dl
inc si
jmp short dtoc
ok:
ret
show_str:
mov ax, 0b800h
mov es, ax
mov al, 0A0H
mov ah, 0
dec dh
mul dh
mov bx, ax
mov al, 2
mov ah, 0
mul dl
sub ax, 2
add bx, ax
mov al, cl
mov ch, 0
mov ah, 0
mov di, 0
mov si, 0
kiss:
mov cl, ds:
jcxz s
mov es:, cl
mov es:, al
inc si
add di, 2
jmp short kiss
s:
ret
code ends
end start
人造人 发表于 2018-10-19 16:46
我知道我错哪里了,他是按照ASCII输出的这几个数在ASCII里面就是这几个标志,我得加每个字节加30H才行,谢谢了啊
这个脑袋蒙圈了
页:
[1]