注册 登录
编程论坛 汇编论坛

请教大家,关于结果输出(显示)的问题

井盖 发布于 2010-06-08 06:02, 715 次点击
题目:编写一个计算从1加到100的和的程序,并将结果在屏幕上显示出来。
程序:
.386                        
.model flat,c               
extern printf:proc
extern scanf: proc

public c unsere_asm_funktion  

.data                        

start:
mov eax,0                    
mov ebx,1                     
mov ecx,100                  
next:                        
add eax,ebx                  
inc ebx                       
loop next                     
mov ah,4ch                    
ret                           
unsere_asm_funktion endp      
end                          
问题:计算正确,但是结果无法在屏幕(黑色的对话框)上显示(显示10进制结果)。
缺少显示结果的语句,但是我实在是搞不定了。
我是初次接触汇编,无编程基础。
诚心求教,先谢谢大家了。
5 回复
#2
井盖2010-06-12 16:47
为什么大家都只看不回帖呢?是不是我问题说的不明白还是。。。。
伤心。
我是真心求教大家的。
#3
zklhp2010-06-12 18:48
以下是引用井盖在2010-6-12 16:47:37的发言:

为什么大家都只看不回帖呢?是不是我问题说的不明白还是。。。。
伤心。
我是真心求教大家的。
我是不会~
#4
Mata_Fu2010-06-15 23:05
哈,循环转~
程序代码:
Data segment
   Msg1 db "Please input the number of students:$"
   Num db 0
   EnMsg db 0ah,0dh,'$'
   Msg2 db "Please input the grade of each students:$"
   Msg3 db "The average grade of these students is:$"
   avg db 0
   ascavg db 0,0,'$'
Data ends

Stack segment para stack
   db 20h dup(0)
Stack ends

code segment
       Assume Cs:code,Ss:stack,ds:Data

Start: mov ax,data
       mov ds,ax
       lea dx,Msg1
       mov ah,09h
       int 21h
       Call Numproc
       mov num,bl
       lea dx,EnMsg
       mov ah,09h
       int 21h
       lea dx,Msg2
       mov ah,09h
       int 21h
       call Avgproc
       call bta
       mov ah,4ch
       int 21h
Numproc proc
       push ax
       push cx
       push dx
       lea dx,EnMsg
       mov ah,09h
       int 21h
       mov bl,0
lop1:  mov ah,01h
       int 21h
       cmp al,0dh
       jz lop2
       cmp al,0dh
       jl lop1
       cmp al,'9'
       ja lop1
       sub al,30h
       mov cl,al
       mov al,bl
       mov ch,10
       mul ch
       mov bl,al
       add bl,cl
       jmp lop1
lop2:  pop dx
       pop cx
       pop ax
       ret
Numproc endp

Avgproc proc
       push ax
       push cx
       xor dx,dx
       mov cl,num
lop3:  call Numproc
       xor ax,ax
       mov al,bl
       add ax,dx
       Div num
       add avg,al
       xor dx,dx
       mov dl,ah
       sub cl,1
       jnz lop3
       pop ax
       pop cx
       ret
Avgproc endp

bta proc
       push ax
       push bx
       xor ax,ax
       mov al,avg
       mov bl,10
       div bl
       add ah,30h
       add al,30h
       mov ascavg,al
       mov ascavg+1,ah
       lea dx,EnMsg
       mov ah,09h
       int 21h
       lea dx,ascavg
       mov ah,09h
       int 21h
       pop bx
       pop ax
       ret
bta endp
code ends
   end start
#5
Mata_Fu2010-06-15 23:06
上面是一个求平均分再输出的例子,bta是输出转化,你好好看看吧~
#6
wuliqv2010-06-21 20:14
一个简单的例子

.386
.model flat,stdcall
option casemap:none

include        windows.inc
include        kernel32.inc
includelib    kernel32.lib
include        msvcrt.inc
includelib    msvcrt.lib


.data
szFormat        db    '结果:%d',0

.code

start:   
    mov eax,0
    mov ebx,1
    mov ecx,100

next:
    add eax,ebx
    inc ebx
    loop next
   
    invoke crt_printf, addr szFormat, eax


    invoke ExitProcess,NULL
end start
1