试图在程序集

时间:2016-05-13 14:37:19

标签: assembly x86 dos

我一直在尝试打印一个整数数组大约4个小时。 不幸的是,我甚至没有成功打印数组中的1个数字。 我有一个单一数字100%的代码。

我尝试在此代码中打印数组中的单个数字。 结果很奇怪:

      32

结果假设为:

      2

因为在A数组中只有数字2。

如果我更改这些行:

jge loopy
mov byte ptr[si],   '-'
jmp loopy

为:

 jge soff
 mov byte ptr[si],   '-'

它有效,打印数字2。循环出错了,即使循环没有做任何事情(因为只有1个数字)并且只返回soff标签!

当然,我可以在互联网上找到一个代码,但我真的想知道我的代码出了什么问题。

.model  small
.stack   100h
.data
A db 2
N equ 1
arrayCounter db 0

num  dw  ?
numS db  20 dup(' '),'$'
os dw ?


.code
    mov ax, @data
    mov ds, ax

    mov di,offset A
    mov os,offset numS

    loopy:
    cmp cx,N
    je soff
    inc cx

    ; move the next number to print, to num value
    mov bl,arrayCounter
    mov al,[di+bx]
    cbw
    inc arrayCounter
    mov num,ax



    mov ax, num
    mov bx, 10

    mov si, offset numS+19

next:   cwd
    idiv    bx
    cmp dx, 0
    jge cont
    neg dx
cont:
    add dl, 48
    mov [si],   dl
    dec si
              cmp   ax, 0
    jz  sof
    jmp         next
sof:    
    cmp num,    0

    jge loopy
    mov byte ptr[si],   '-'
    jmp loopy


soff:
    mov ah, 9h
    mov dx, offset numS

    int 21h


    .exit
end

0 个答案:

没有答案