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

vltsax25  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

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

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码把零替换成空格,但它也去掉了字符串中间的零。我希望能够恢复它。

jq6vz3qz

jq6vz3qz1#

CODE    SEGMENT
BUFFER  DB 7 DUP (?)
DATA    SEGMENT
MYNAME  DB 'Name$'
DATA    ENDS

字符串
在CODE段中定义BUFFER是多么有趣啊!
你好,很抱歉问一下怎么做?

  • 我没有使用mov cx, 4来控制loop指令的循环,而是首先选择检测除数BX变为1,这将在4次迭代后发生。然后我将此检测上移,因此一旦BX变为10,我就可以提前退出。这避免了愚蠢的10 / 10除法。
  • 为了解决替换问题,我开始计算非零的数字。我使用CX。我只允许替换,如果CX是零。
xor  cx, cx    ; Counts the non-zero digits
R1: mov  ax, dx    ; Load the previous remainder
    xor  dx, dx
    div  bx
    test ax, ax    ; [0,9]
    jnz  R2
    test cx, cx
    jnz  R3        ; If CX = 1+ then it's no longer allowed to replace
    mov  al, " "
    jmp  R4
R2: inc  cx
R3: add  al, '0'
R4: stosb
    cmp  bx, 10
    je   R5

    PUSH DX
    MOV  AX, BX
    MOV  DX, 0
    MOV  BX, 10
    DIV  BX
    MOV  BX, AX
    POP  DX

    jmp R1
R5:

相关问题