【问题标题】:TASM pointer position comparisonTASM指针位置比较
【发布时间】:2015-12-17 08:30:05
【问题描述】:

我的最后一段代码用于检查给定行是否为回文的程序。不过,我有一件事需要帮助。

我有指针 si 和 di,指向行的第一个和最后一个字符。我用它们来比较角色,然后继续。但是,我还需要比较指针本身的位置,所以我知道我需要在哪里停下来,因为我知道这条线是回文。

这是进行比较的代码段。

is_pol PROC near
mov si, offset currentline
mov di, offset currentline
add di, currentline_offset

comparesi:
    cmp si, 'a'         
        jl notsmallsi
    cmp si, 'z'
    jg notsymbolsi
    jmp comparedi
notsmallsi:
    cmp si, 'A'
    jl notlargesi
    cmp si, 'Z'
    jg notsymbolsi
    jmp comparedi
notlargesi:
    cmp si, '0'
    jl notsymbolsi
    cmp si, '9'
    jg notsymbolsi
    jmp comparedi
notsymbolsi:
    inc si
    jmp comparesi
comparedi:
    cmp di, 'a'
    jl notsmalldi
    cmp di, 'z'
    jg notsymboldi
    jmp compare
notsmalldi:
    cmp di, 'A'
    jl notlargedi
    cmp di, 'Z'
    jg notsymboldi
    jmp compare
notlargedi:
    cmp di, '0'
    jl notsymboldi
    cmp di, '9'
    jg notsymboldi
    jmp compare
notsymboldi:
    dec di
    jmp comparedi
compare:
    cmp si, di
    jne no_palindrome
    inc si
    dec di

    jmp is_palindrome
    jmp comparesi

no_palindrome:
    lea dx, not_palindrome
    mov cx, 30
    ret

is_palindrome:
    lea dx, palindrome
    mov cx, 30
    ret
is_pol ENDP

缺少的代码部分是“dec di”和“jmp is_palindrome”之间的那部分

感谢您的帮助。

【问题讨论】:

    标签: assembly tasm


    【解决方案1】:

    SIDI 指针。由于指针只是一个内存地址,它们包含“指针本身的位置”。如果左侧开始递增指针的内存地址小于或等于右侧开始递减点的内存地址,即SIDI,则可以比较它们并中断循环。

    一个巨大的错误:要比较内存的值,您必须取消引用指针。目前,您将指针与字符 (cmp si, 'a') 进行比较。用括号取消引用 SIDI 并添加大小规范:cmp byte ptr [si], 'a'

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2012-02-23
      • 2012-10-05
      • 2018-10-18
      相关资源
      最近更新 更多