请使用tasm告诉下面的汇编代码有什么问题,我根本无法获得任何输出。
从tasm输出
D:\tasmzip\tasmzip>tasm test1.asm
Turbo Assembler Version 1.0 Copyright (c) 1988 by Borland International
Assembling file: TEST1.ASM
Error messages: None
Warning messages: None
Remaining memory: 453k
D:\tasmzip\tasmzip>tlink test1.obj
Turbo Link Version 2.0 Copyright (c) 1987, 1988 Borland International
D:\tasmzip\tasmzip>test1
D:\tasmzip\tasmzip>
我的代码:
ASSUME CS:CODE , DS : DATA
ORG 0000H
DATA SEGMENT
LIST DB 2,23,11,7,5,25,13,18,0 ; Given Array with last element zero to indicate end of array
DATA ENDS
CODE SEGMENT
ORG 2000H
START : lEA SI , list
MOV CL,0
MOV AL,0
AGAIN: CMP AL,[SI] ; look for end of
JE over
INC SI
INC CL
Jmp AGAIN
over : MOV AH,4C
INT 21H
CODE ENDS
END START
答案 0 :(得分:1)
您没有打印出答案,只是退出0
作为返回值。您需要添加更多系统调用以在循环后打印CL
中的值。
答案 1 :(得分:0)
您的所有代码段都在计算它们,您仍需要在完成后输出值。
如果计数小于10,您可以使用简单的:
over: push cx ; transfer cl to dl for int21/ah=2.
pop dx
add dx, 30h ; convert number to character.
mov ah, 02h ; prints the character in dl.
int 21h
mov ah, 4ch ; exit.
int 21h
就打印字符串而言,您可以使用int21,ah = 9。 Ralf Brown's interrupt list是这种东西的绝佳资源。
输出大于9的数字时,你必须进行正常的除法/模数欺骗。
可以找到一些可以执行此操作的代码here,但您可以使用类似com
文件的内容:
0100 mov si, numlist ; get the list base.
0103 mov cl, 0 ; counter initially zero.
0105 loop1: mov al, 0 ; stop on sentinel of zero.
0107 cmp al, [si]
0109 je pr_pre
010B inc si ; otherwise advance and increase count.
010C inc cl
010E jmp loop1 ; and go back for more.
0110 pr_pre: mov ah, 09 ; output the initial text.
0112 mov dx, pretext
0115 int 21
0117 hundreds: mov dl, 30 ; process hundreds digit, initially '0'.
0119 jmp skip2 ; skip initial.
011B loop2: inc dl ; add 1 to count, sub 100 from tally
011D sub cl, 64
0120 skip2: cmp cl, 64
0123 jge loop2 ; continue until < 100
0125 mov ah, 02 ; print character.
0127 int 21
0129 tens: mov dl, 30 ; process tens digit, same as hundreds.
012B jmp skip3
012D loop3: inc dl
012F sub cl, 0a ; except use 10 rather than 100
0132 skip3: cmp cl, 0a
0135 jge loop3
0137 mov ah, 02
0139 int 21
013B units: mov dl, cl ; what's left is units.
013D add dl, 30 ; just add '0' and print.
0140 mov ah, 02
0142 int 21
0144 pr_post: mov ah, 09 ; the print CR/LF.
0146 mov dx, 15e
0149 int 21
014B exit: mov ah, 4c ; and exit.
014D int 21
014F pretext: db "The count is: $"
015E posttxt: db 0a, 0d, "$"
0161 numlist: db 1,2,3,4,5,6,7,8,9
016a db 10,11,12,13,14,0