主题:[讨论]几个关于Assembly Language的基本问题
代码1:
TITLE Fibonacci Numbers (Finbon.asm)
; This program shows how use the WHILE directive
; to generate doubleword variables containing
; all Fibonacci numbers less than a given limit.
; Last update: 10/14/01
INCLUDE Irvine32.inc
.data
val1 = 1
val2 = 1
DWORD val1 ; first two values
DWORD val2
val3 = val1 + val2
WHILE val3 LT 0F0000000h
DWORD val3
val1 = val2
val2 = val3
val3 = val1 + val2
ENDM
.code
main PROC
exit
main ENDP
END main
问题1:[color=FF0000][size=2]DWORD val3 一句写到 DWORD val2 后面为什么编译出错?[/size][/color]
代码2:TITLE Creating a Linked List (List.asm)
; This program shows how the STRUC directive
; and the REPT directive can be combined to
; create a linked list at assembly time.
; Last update: 11/8/02
INCLUDE Irvine32.inc
ListNode STRUCT
NodeData DWORD ?
NextPtr DWORD ?
ListNode ENDS
TotalNodeCount = 15
NULL = 0
Counter = 0
.data
LinkedList LABEL PTR ListNode
REPT TotalNodeCount
Counter = Counter + 1
; ListNode <Counter, ($ + SIZEOF ListNode)> ; TRY THIS
ListNode <Counter, ($ + Counter * SIZEOF ListNode)>
ENDM
ListNode <0,0> ; tail node
.code
main PROC
mov esi,OFFSET LinkedList
; Display the integers in the NodeData members.
NextNode:
; Check for the tail node.
mov eax,(ListNode PTR [esi]).NextPtr
cmp eax,NULL
je quit
; Display the node data.
mov eax,(ListNode PTR [esi]).NodeData
call WriteDec
call Crlf
; Get pointer to next node.
mov esi,(ListNode PTR [esi]).NextPtr
jmp NextNode
quit:
exit
main ENDP
END main
问题2:ListNode <Counter, ($ + Counter * SIZEOF ListNode)> 我觉得应该是ListNode <Counter, ($ + SIZEOF ListNode)>。因为$伪指令是取当前指令的地址。请高手指点一下。
先在这里谢谢各位了。
TITLE Fibonacci Numbers (Finbon.asm)
; This program shows how use the WHILE directive
; to generate doubleword variables containing
; all Fibonacci numbers less than a given limit.
; Last update: 10/14/01
INCLUDE Irvine32.inc
.data
val1 = 1
val2 = 1
DWORD val1 ; first two values
DWORD val2
val3 = val1 + val2
WHILE val3 LT 0F0000000h
DWORD val3
val1 = val2
val2 = val3
val3 = val1 + val2
ENDM
.code
main PROC
exit
main ENDP
END main
问题1:[color=FF0000][size=2]DWORD val3 一句写到 DWORD val2 后面为什么编译出错?[/size][/color]
代码2:TITLE Creating a Linked List (List.asm)
; This program shows how the STRUC directive
; and the REPT directive can be combined to
; create a linked list at assembly time.
; Last update: 11/8/02
INCLUDE Irvine32.inc
ListNode STRUCT
NodeData DWORD ?
NextPtr DWORD ?
ListNode ENDS
TotalNodeCount = 15
NULL = 0
Counter = 0
.data
LinkedList LABEL PTR ListNode
REPT TotalNodeCount
Counter = Counter + 1
; ListNode <Counter, ($ + SIZEOF ListNode)> ; TRY THIS
ListNode <Counter, ($ + Counter * SIZEOF ListNode)>
ENDM
ListNode <0,0> ; tail node
.code
main PROC
mov esi,OFFSET LinkedList
; Display the integers in the NodeData members.
NextNode:
; Check for the tail node.
mov eax,(ListNode PTR [esi]).NextPtr
cmp eax,NULL
je quit
; Display the node data.
mov eax,(ListNode PTR [esi]).NodeData
call WriteDec
call Crlf
; Get pointer to next node.
mov esi,(ListNode PTR [esi]).NextPtr
jmp NextNode
quit:
exit
main ENDP
END main
问题2:ListNode <Counter, ($ + Counter * SIZEOF ListNode)> 我觉得应该是ListNode <Counter, ($ + SIZEOF ListNode)>。因为$伪指令是取当前指令的地址。请高手指点一下。
先在这里谢谢各位了。