Assembly 两个汇编代码之间的差异
我需要帮助理解汇编语言中的代码,将变量声明为局部变量或全局变量 这段代码之间有什么区别Assembly 两个汇编代码之间的差异,assembly,pep8-assembly,Assembly,Pep8 Assembly,我需要帮助理解汇编语言中的代码,将变量声明为局部变量或全局变量 这段代码之间有什么区别 ;File: fig0647.pep ;Computer Systems, Fourth edition ;Figure 6.47 ; BR main data: .EQUATE 0 ;struct field #2d next: .EQUATE 2 ;struct field #2h ; ;******* main ()
;File: fig0647.pep
;Computer Systems, Fourth edition
;Figure 6.47
;
BR main
data: .EQUATE 0 ;struct field #2d
next: .EQUATE 2 ;struct field #2h
;
;******* main ()
first: .EQUATE 4 ;local variable #2h
p: .EQUATE 2 ;local variable #2h
value: .EQUATE 0 ;local variable #2d
main: SUBSP 6,i ;allocate #first #p #value
LDA 0,i ;first = 0
STA first,s
DECI value,s ;cin >> value
while: LDA value,s ;while (value != -9999)
CPA -9999,i
BREQ endWh
LDA first,s ; p = first
STA p,s
LDA 4,i ; first = new node
CALL new ; allocate #data #next
STX first,s
LDA value,s ; first->data = value
LDX data,i
STA first,sxf
LDA p,s ; first->next = p
LDX next,i
STA first,sxf
DECI value,s ; cin >> value
BR while
endWh: LDA first,s ;for (p = first
STA p,s
for: LDA p,s ; p != 0
CPA 0,i
BREQ endFor
LDX data,i ; cout << p->data
DECO p,sxf
CHARO ' ',i ; << ' '
LDX next,i ; p = p->next)
LDA p,sxf
STA p,s
BR for
endFor: ADDSP 6,i ;deallocate #value #p #first
STOP
;
;******* operator new
; Precondition: A contains number of bytes
; Postcondition: X contains pointer to bytes
new: LDX hpPtr,d ;returned pointer
ADDA hpPtr,d ;allocate from heap
STA hpPtr,d ;update hpPtr
RET0
hpPtr: .ADDRSS heap ;address of next free byte
heap: .BLOCK 1 ;first byte in the heap
.END
;文件:fig0647.pep
;计算机系统,第四版
;图6.47
;
丁烷
数据:。等于0;结构字段#2d
其次:。等于2;结构字段#2h
;
;******* 主要()
第一:等于4;局部变量#2h
p:=2;局部变量#2h
值:。等于0;局部变量#2d
主要品种:亚种6,i;分配#优先#p#值
lda0,i;第一个=0
STA第一,s
分贝值,s;cin>>值
while:LDA值,s;while(值!=-9999)
CPA-9999,i
BREQ ENDW
LDA first,s;p=第一
斯塔普,s
lda4,i;第一个=新节点
呼唤新;分配#数据#下一步
STX优先,s
LDA值,s;第一->数据=值
LDX数据,i
STA优先,sxf
LDA p,s;第一个->下一个=p
下一步,我
STA优先,sxf
分贝值,s;cin>>值
一会儿
endWh:LDA-first,s;对于(p=第一
斯塔普,s
对于:LDA p,s;p!=0
CPA 0,i
BREQ endFor
LDX数据,i;cout数据
德科p,sxf
CHARO“”,i;next)
ldap,sxf
斯塔普,s
BR代表
endFor:ADDSP 6,i;先解除分配#价值#p#
停止
;
;******* 新接线员
; 前提条件:包含字节数
; 后置条件:X包含指向字节的指针
新的:LDX hpPtr,d;返回指针
ADDA hpPtr,d;从堆中分配
STA-hpPtr,d;更新hpPtr
RET0
hpPtr:。添加RSS堆;下一个空闲字节的地址
堆:。块1;堆中的第一个字节
.完
这个密码呢
BR main
data: .EQUATE 0 ;struct field #2d
next: .EQUATE 2 ;struct field #2h
;
;.........main()
first: .BLOCK 2 ;global variable #2h
p: .BLOCK 2 ;global variable #2h
value: .BLOCK 2 ;global variable #2d
main: LDA 0,i ;first = 0
STA first,s
DECI value,s ;cin >> value
while: LDA value,s ;while (value != -9999)
CPA -9999,i
BREQ endWh
LDA first,s ; p = first
STA p,s
LDA 4,i ; first = new node
CALL new ; allocate #data #next
STX first,s
LDA value,s ; first->data = value
LDX data,i
STA first,sxf
LDA p,s ; first->next = p
LDX next,i
STA first,sxf
DECI value,s ; cin >> value
BR while
endWh: LDA first,s ;for (p=first)
STA p,s
for: LDA p,s ; p != 0
CPA 0,i
BREQ endFor
LDX data,i ; couunt << p->data
DECO p,sxf
CHARO ' ',s ; << ' '
LDX next,s ; p = p->next)
LDA p,sxf
STA p,s
BR for
endFor: STOP
;
;....... operator new
; Precondition: A contains number of bytes
; Postcondition: X contains pointer to byte
new: LDX hpPtr,d ;returned pointer
ADDA hpPtr,d ;allocate from heap
STA hpPtr,d ;update hpPtr
RET0
hpPtr: .ADDRSS heap ;address of next free byte
heap: .BLOCK 1 ;first byte in the heap
.END
BR main
数据:。等于0;结构字段#2d
其次:。等于2;结构字段#2h
;
;.........main()
第一:第二区;全局变量#2h
第2区;全局变量#2h
值:。块2;全局变量#2d
主:LDA 0,i;第一个=0
STA第一,s
分贝值,s;cin>>值
while:LDA值,s;while(值!=-9999)
CPA-9999,i
BREQ ENDW
LDA first,s;p=第一
斯塔普,s
lda4,i;第一个=新节点
呼唤新;分配#数据#下一步
STX优先,s
LDA值,s;第一->数据=值
LDX数据,i
STA优先,sxf
LDA p,s;第一个->下一个=p
下一步,我
STA优先,sxf
分贝值,s;cin>>值
一会儿
endWh:LDA-first,s;对于(p=第一个)
斯塔普,s
适用范围:LDA p,s;p!=0
CPA 0,i
BREQ endFor
LDX数据,i;装载数据
德科p,sxf
沙罗;下一步)
ldap,sxf
斯塔普,s
BR代表
结束:停止
;
;....... 新接线员
; 前提条件:包含字节数
; 后置条件:X包含指向字节的指针
新的:LDX hpPtr,d;返回指针
ADDA hpPtr,d;从堆中分配
STA-hpPtr,d;更新hpPtr
RET0
hpPtr:。添加RSS堆;下一个空闲字节的地址
堆:。块1;堆中的第一个字节
.完
任何形式的帮助都将不胜感激 变体1:在启动时向某个堆栈指针添加6个字节(为变量保留6个字节),“first”、“p”、“value”只是汇编程序的别名(要知道应该存储哪个变量,与C中定义前2个变量相同),并且没有为这些
生成代码。equale
BR main ; <-- this BR is unneeded, there's no code from here to main
...
first: .EQUATE 4 ;local variable #2h
p: .EQUATE 2 ;local variable #2h
value: .EQUATE 0 ;local variable #2d
main: SUBSP 6,i ;allocate #first #p #value
BR main;
BR main ; this BR makes sense, there's code inbetween this and main
first: .BLOCK 2 ;<-- here e.g. a "00 00" appears INSIDE the code
p: .BLOCK 2 ;global variable #2h
value: .BLOCK 2 ;global variable #2d
main: LDA 0,i