【问题标题】:Possible stack overflow in assembly code汇编代码中可能的堆栈溢出
【发布时间】:2011-03-30 06:37:20
【问题描述】:

您好,我正在尝试用 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 

【问题讨论】:

    标签: assembly stack


    【解决方案1】:
    ;display output
    mov dx,year
    mov ah,09h
    int 21h
    

    我认为这里要显示的字符串不会以 $ 符号终止 - 它可能会显示字符,直到它到达内存中某处表示 $ (36) 的字节,这可能是显示人工字符。

    我认为在打印字符串时也应该使用offset(请参阅example)。

    【讨论】:

    • 是的,我也投票给那个。现在谁还记得 Int 21h func 09 需要一个以美元结尾的字符串?地球上没有人。 @Jan Zyka,你是来自火星的外星人,还是类似的人?
    • 组装是我对同事的一种爱好 :) 这很有趣!
    • 啊,不知道他们在火星上有大学 :) 更令人震惊的是他们在那里使用与美国相同的货币符号 :)
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 2012-01-19
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多