【问题标题】:How can I print a number stored in AL, not the character? (assembly)如何打印存储在 AL 中的数字,而不是字符? (部件)
【发布时间】:2014-04-14 01:20:24
【问题描述】:

我有一个对数组的正数求和的程序...但是我在打印结果时遇到了问题。在我的程序中,结果是 37,但是当我执行它时,它会打印一个 %,它相当于十进制的 37,或 25h... 我只希望它打印 37.. 这是我的代码:

 DATOS SEGMENT ; 
 ARRAY DB -1,-2,3,4,5,-6,7,8,-9,10  ;SUMA=37
 COUNTER DW 10
 DATOS ENDS

SEGSTACK SEGMENT STACK
DW 256 DUP (?)
SEGSTACK ENDS

CODIGO SEGMENT
SUMA PROC FAR
    ASSUME CS:CODIGO, DS:DATOS, SS:SEGSTACK
    PUSH DS
    XOR AX, AX
    PUSH AX 
    MOV AX, DATOS
    MOV DS, AX


 MOV AL, 00H
 MOV SI, 00H
 MOV CX, COUNTER

 TAE: CMP ARRAY[SI],00H

 JL MAO
 ADD AL,ARRAY[SI]

 MAO: INC SI 

 LOOP TAE


 ;////////////// P R I N T I N G 
 mov DL,AL
 mov ah,02h
 int 21h
 ;//////////////
 RET
 SUMA ENDP
 CODIGO ENDS
 END SUMA

【问题讨论】:

  • 需要转成字符串。这方面的例子有很多,显示一些努力。
  • 要从单个十进制值中获取组合的单个十进制值,请记住我们使用以十为底的系统。

标签: assembly masm x86-16


【解决方案1】:

我解决了这个问题:D

DATOS SEGMENT ; 
ARRAY DB -1,-2,3,4,5,-6,7,8,-9,10  ;SUMA=37
CONTADOR DW 10
LET DB 10,13,"PROGRAMA QUE SUMA ELEMENTOS POSITIVOS DE UN VECTOR: $"
NUMM DB 10,13,"NUMEROS -1,-2,3,4,5,-6,7,8,-9,10  $"
SUM DB 10,13,'EL RESULTADO ES:  $'
DATOS ENDS

SEGSTACK SEGMENT STACK
DW 256 DUP (?)
SEGSTACK ENDS

CODIGO SEGMENT

    SUMA PROC FAR
    ASSUME CS:CODIGO, DS:DATOS, SS:SEGSTACK
    PUSH DS
    XOR AX, AX
    PUSH AX 
    MOV AX, DATOS
    MOV DS, AX

LEA DX, LET
MOV AH,09H
INT 21H

LEA DX, NUMM
MOV AH,09H
INT 21H

LEA DX, SUM
MOV AH,09H
INT 21H

MOV AL, 00H
MOV SI, 00H
MOV CX, CONTADOR

TAE: CMP ARRAY[SI],00H

JL MAO
ADD AL,ARRAY[SI]
MAO: INC SI 

LOOP TAE



MOV AH, 0 
MOV BL, 10  
DIV BL 
MOV CL, AL  
MOV CH, AH  
ADD AL, 48  
MOV AH, 2 
MOV DL, AL  
INT 21h
ADD CH, 48  
MOV DL, CH  
INT 21h
MOV AH, 4Ch        
INT 21h

 RET
 SUMA ENDP
 CODIGO ENDS
 END SUMA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2014-06-17
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多