如何从字符串中删除前导零?将 int 转换为带有前导空格而不是零的固定字符串

问题描述 投票:0回答:1

我对汇编语言非常陌生,我想知道如何删除整数字符串前面的零?这是完成之前我需要的最后一件事,这是我们的教授让我们修改的:

    ASSUME CS:CODE, DS:DATA
CODE    SEGMENT
BUFFER  DB 7 DUP (?)
DATA    SEGMENT
MYNAME  DB 'Name$'
DATA    ENDS
START   PROC
    
    MOV AX, SEG DATA
    MOV DS, AX
    MOV DX,OFFSET MYNAME
    MOV AH,9
    INT 21H

    MOV DL, 10
    MOV AH, 02h
    INT 21h
    MOV DL, 13
    MOV AH, 02h
    INT 21h

    MOV AX, 65505
    CALL PRN_DEC
    MOV AX, 539
    CALL PRN_DEC
    MOV AX, 5567
    CALL PRN_DEC
    MOV AH,4CH
    INT 21H
START   ENDP

PRN_DEC PROC

    
    MOV BX,SEG CODE

    MOV ES,BX
    MOV DS,BX

    MOV DI, OFFSET BUFFER

    MOV BX,10000

    MOV DX,AX

    MOV CX,4

R1: MOV AX,DX
    MOV DX,0
    DIV BX  
    CMP AX,0
    JNZ R4
    MOV AX,20H
    JMP R5
R4:
    ADD AX,30H
R5: STOSB
    
    PUSH DX
    MOV AX,BX
    MOV DX,0
    MOV BX,10
    DIV BX
    MOV BX,AX
    POP DX
    LOOP R1

    MOV AX,DX
    ADD AX,30H
    STOSB   
    MOV AL,'$'
    STOSB
    
    MOV DX,OFFSET BUFFER
    MOV AH,9
    INT 21H
    
    MOV DL, 10
    MOV AH, 02h
    INT 21h
    MOV DL, 13
    MOV AH, 02h
    INT 21h
    
    RET
PRN_DEC ENDP

CODE    ENDS
    END START

我们的教授让我们使用 ASCII 代码将零替换为空格,但它也删除了字符串中间的零。我希望能够恢复它。

assembly x86-16 number-formatting tasm dosbox
1个回答
0
投票
CODE    SEGMENT
BUFFER  DB 7 DUP (?)
DATA    SEGMENT
MYNAME  DB 'Name$'
DATA    ENDS

看到 CODE 段中定义的 BUFFER 是多么奇怪!

你好,很抱歉问这个问题,但我该怎么做?

  • 我没有使用
    mov cx, 4
    指令来控制循环,而是首先选择检测除数 BX 变为 1,这将在 4 次迭代后发生。然后我将这个检测向上移动,这样一旦 BX 变为 10,我就可以提前退出。这避免了 10 / 10 的愚蠢划分。
    为了解决替换问题,我开始计算非零数字。我为此使用 CX。如果 CX 为零,我只允许更换。
  • loop
© www.soinside.com 2019 - 2024. All rights reserved.