2011-03-30 71 views
2

嗨我有一個日期程序的問題,我試圖用匯編語言寫入nasm,該程序正常工作,但是當我運行它時,它顯示我的日期以及外國符號,我認爲它是一個堆棧問題。我要如何解決這個問題,請大家幫幫我:-(彙編代碼中可能的堆棧溢出

這是程序

org 100h 
bits 16d 

section .data 

endProg db 0ah,0dh,"Program Terminated","$" 
year db 0, 0, '\'   
month db 0, 0, '\' 
day db 0ah,0dh, 0 
skipLine db 0ah,0dh 
hour db 0,0, ':'  
min db 0, 0, ':' 
sec db 0, 0, ' '  

section .bss 

section .text 

start: 

call clear_screan 

; get date 
mov ah, 2ah     
int 21h 

; year 
add cx, 0f830h     
mov ax, cx 
call convert 
mov [year], ax 

; month 
mov al, dh      
call convert 
mov [month], ax 

; day 
mov al, dl      
call convert 
mov [day], ax 

mov ax,skipLine 

; get time 
mov ah, 2ch     
int 21h 

; hour 
mov al, ch      
call convert 
mov [hour], ax 

; minute 
mov al, cl      
call convert 
mov [min], ax 

; second 
mov al, dh      
call convert 
mov [sec], ax 

pop ax 
mov ax,skipLine 

    ;display output 
    mov dx,year 
    mov ah,09h 
    int 21h 

    mov DX,endProg 
    mov AH,09h 
    int 21h 

int 20h 

;..................processes........................... 

    clear_screan: 
    mov AX,03h 
    int 10h 
    ret 

    convert: 
    push cx 
    xor ah, ah 
    mov cl, 10 
    div cl 
    add ax, 3030h 
    pop cx 
    ret 
+1

請不要使用CAPS。 – Spyros 2011-03-30 06:39:58

回答

3
;display output 
mov dx,year 
mov ah,09h 
int 21h 

我想在這裏顯示的字符串不與$標誌終止 - 它可能裏顯示charaters直到它到達代表$(36)的字節,這可能是顯示人造字符的原因。

我認爲在打印字符串時也應該使用offset(參見example)。

+0

是的,我也爲那個投票。現在誰記得Int 21h func 09需要以美元結尾的字符串?沒有人在地球上。 @Jan Zyka,你是火星的外星人,還是那樣的? – TheBlastOne 2011-03-30 06:57:44

+0

大會對我的同事很有興趣:)這真是太好玩了! – 2011-03-30 07:00:06

+0

啊,不知道他們在火星上有大學:)更令人震驚的是,他們在那裏使用與美國相同的貨幣符號:) – TheBlastOne 2011-03-30 07:53:16