📄 wdis.gml
字号:
.code break
List of external references
SYMBOL
-------
printf 0014
.new_section .const, "drw4"
0000 L$0:
0000 48 65 6C 6C 6F 20 77 6F 72 6C 64 0A 00 00 00 00 Hello world.....
.new_section .const2, "drw4"
.new_section .data, "drw4"
.new_section .bss, "urw4"
0000 .bss:
BSS Size: 0 bytes
.new_section .pdata, "dr2"
0000 // Procedure descriptor for main
main // BeginAddress : 0
main+0x28 // EndAddress : 40
00000000 // ExceptionHandler : 0
00000000 // HandlerData : 0
main+0x8 // PrologEnd : 8
.new_section .drectve, "iRr0"
0000 2D 64 65 66 61 75 6C 74 6C 69 62 3A 63 6C 69 62 -defaultlib:clib
0010 20 2D 64 65 66 61 75 6C 74 6C 69 62 3A 70 6C 69 -defaultlib:pli
0020 62 20 2D 64 65 66 61 75 6C 74 6C 69 62 3A 6D 61 b -defaultlib:ma
0030 74 68 20 00 th .
.code break
List of public symbols
SYMBOL SECTION OFFSET
--------------------------------------------------------
main .text 00000000
.code end
.do end
.do end
.if '&lang' eq 'FORTRAN 77' .do begin
.if '&arch' eq '16-bit' .do begin
.code begin
Module: hello.for
GROUP: 'DGROUP' CONST,_DATA,_BSS
Segment: CONST PARA USE16 0000000B bytes
0000 L$1:
0000 48 65 6C 6C 6F 20 77 6F 72 6C 64 Hello world
Segment: _DATA PARA USE16 00000006 bytes
0000 L$2:
0000 00 00 00 00 DD L$1
0004 0B 00 ..
BSS Size: 0 bytes
Segment: FMAIN_TEXT BYTE USE16 00000017 bytes
program main
0000 FMAIN:
0000 52 PUSH DX
print *, 'Hello world'
0001 9A 00 00 00 00 CALL RT@IOWrite
0006 B8 00 00 MOV AX,offset L$2
0009 8C D2 MOV DX,SS
000B 9A 00 00 00 00 CALL RT@OutCHAR
0010 9A 00 00 00 00 CALL RT@EndIO
end
0015 5A POP DX
0016 CB RETF
Routine Size: 23 bytes, Routine Base: FMAIN_TEXT + 0000
No disassembly errors
.code break
List of external references
SYMBOL
-------
RT@EndIO 0011
RT@IOWrite 0002
RT@OutCHAR 000C
List of public symbols
SYMBOL SECTION OFFSET
--------------------------------------------------------
FMAIN FMAIN_TEXT 00000000
.code end
.do end
.if '&arch' eq '32-bit' .do begin
.code begin
Module: hello.for
Group: 'DGROUP' CONST,_DATA,_BSS
Group: 'FLAT'
Segment: 'FMAIN_TEXT' BYTE USE32 00000014 bytes
program main
print *, 'Hello world'
0000 e8 00 00 00 00 FMAIN call RT@IOWrite
0005 b8 00 00 00 00 mov EAX,offset L2
000a e8 00 00 00 00 call RT@OutCHAR
000f e9 00 00 00 00 jmp RT@EndIO
.code break
No disassembly errors
List of external symbols
Symbol
----------------
RT@EndIO 00000010
RT@IOWrite 00000001
RT@OutCHAR 0000000b
------------------------------------------------------------
Segment: 'CONST' WORD USE32 0000000b bytes
0000 48 65 6c 6c 6f 20 77 6f L1 - Hello wo
0008 72 6c 64 - rld
.code break
No disassembly errors
------------------------------------------------------------
Segment: '_DATA' WORD USE32 00000008 bytes
0000 00 00 00 00 L2 DD DGROUP:L1
0004 0b 00 00 00 - ....
.code break
No disassembly errors
------------------------------------------------------------
List of public symbols
SYMBOL GROUP SEGMENT ADDRESS
---------------------------------------------------------
FMAIN FMAIN_TEXT 00000000
------------------------------------------------------------
.code end
.do end
.do end
.keep
.np
Let us create a form of the listing file that can be used
as input to an assembler.
.millust begin
&prompt.&discmd hello &sw.l=hello.asm &sw.r &sw.a
.millust end
.pc
The output will be produced in the file
.fi hello.asm.
The output, shown below, is the result of using the
.if '&lang' eq 'C' or '&lang' eq 'C/C++' .do begin
&cmppname
.do end
.if '&lang' eq 'FORTRAN 77' .do begin
&cmpname
.do end
compiler.
.if '&lang' eq 'C' or '&lang' eq 'C/C++' .do begin
.if '&arch' eq '16-bit' .do begin
.code begin
.387
PUBLIC main_
EXTRN __STK:BYTE
EXTRN printf_:BYTE
EXTRN ___wcpp_3_data_init_fs_root_:BYTE
EXTRN _small_code_:BYTE
EXTRN _cstart_:BYTE
DGROUP GROUP CONST,CONST2,_DATA,_BSS
_TEXT SEGMENT WORD PUBLIC USE16 'CODE'
ASSUME CS:_TEXT, DS:DGROUP, SS:DGROUP
main_:
MOV AX,0x00000004
CALL near ptr __STK
MOV AX,offset L$1
PUSH AX
CALL near ptr printf_
ADD SP,0x00000002
XOR AX,AX
RET
_TEXT ENDS
.code break
CONST SEGMENT WORD PUBLIC USE16 'DATA'
L$1:
DB 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f
DB 0x72, 0x6c, 0x64, 0x0a, 0x00
CONST ENDS
CONST2 SEGMENT WORD PUBLIC USE16 'DATA'
CONST2 ENDS
_DATA SEGMENT WORD PUBLIC USE16 'DATA'
_DATA ENDS
_BSS SEGMENT WORD PUBLIC USE16 'BSS'
_BSS ENDS
END
.code end
.do end
.if '&arch' eq '32-bit' .do begin
.np
The following is a disassembly of 80x86 code.
.code begin
~.387
~.386p
PUBLIC main_
EXTRN __CHK:BYTE
EXTRN printf_:BYTE
EXTRN ___wcpp_3_data_init_fs_root_:BYTE
EXTRN _cstart_:BYTE
DGROUP GROUP CONST,CONST2,_DATA,_BSS
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
ASSUME CS:_TEXT, DS:DGROUP, SS:DGROUP
main_:
PUSH 0x00000008
CALL near ptr __CHK
PUSH offset L$1
CALL near ptr printf_
ADD ESP,0x00000004
XOR EAX,EAX
RET
_TEXT ENDS
.code break
CONST SEGMENT DWORD PUBLIC USE32 'DATA'
L$1:
DB 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f
DB 0x72, 0x6c, 0x64, 0x0a, 0x00
CONST ENDS
CONST2 SEGMENT DWORD PUBLIC USE32 'DATA'
CONST2 ENDS
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
_DATA ENDS
_BSS SEGMENT DWORD PUBLIC USE32 'BSS'
_BSS ENDS
END
.code end
.np
The following is a disassembly of Alpha AXP code.
.code begin
~.globl main
~.extrn printf
~.extrn _cstart_
~.new_section .text, "crx4"
main:
LDA $SP,-0x10($SP)
STQ $RA,($SP)
LDAH $A0,h^`L$0`($ZERO)
LDA $A0,l^`L$0`($A0)
SEXTL $A0,$A0
BSR $RA,j^printf
MOV 0x00000000,$V0
LDQ $RA,($SP)
LDA $SP,0x10($SP)
RET $ZERO,($RA),0x00000001
.code break
~.new_section .const, "drw4"
`L$0`:
.asciiz "Hello world\n"
.byte 0x00, 0x00, 0x00
~.new_section .pdata, "dr2"
// 0000 Procedure descriptor for main
.long main // BeginAddress : 0
.long main+0x28 // EndAddress : 40
.long 00000000 // ExceptionHandler : 0
.long 00000000 // HandlerData : 0
.long main+0x8 // PrologEnd : 8
~.new_section .drectve, "iRr0"
.asciiz "-defaultlib:clib -defaultlib:plib -defaultlib:math "
.code end
.do end
.do end
.if '&lang' eq 'FORTRAN 77' .do begin
.if '&arch' eq '16-bit' .do begin
.code begin
~.387
PUBLIC FMAIN
EXTRN `RT@IOWrite`:BYTE
EXTRN `RT@OutCHAR`:BYTE
EXTRN `RT@EndIO`:BYTE
EXTRN __init_error:BYTE
EXTRN __init_english:BYTE
EXTRN _cstart_:BYTE
DGROUP GROUP CONST,_DATA,_BSS
CONST SEGMENT PARA PUBLIC USE16 'DATA'
L$1:
DB 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f
DB 0x72, 0x6c, 0x64
CONST ENDS
.code break
_DATA SEGMENT PARA PUBLIC USE16 'DATA'
L$2:
DD L$1
DB 0x0b, 0x00
_DATA ENDS
_BSS SEGMENT PARA PUBLIC USE16 'BSS'
_BSS ENDS
FMAIN_TEXT SEGMENT BYTE PUBLIC USE16 'CODE'
ASSUME CS:FMAIN_TEXT, DS:DGROUP, SS:DGROUP
FMAIN:
PUSH DX
CALL far ptr `RT@IOWrite`
MOV AX,offset L$2
MOV DX,SS
CALL far ptr `RT@OutCHAR`
CALL far ptr `RT@EndIO`
POP DX
RETF
FMAIN_TEXT ENDS
END
.code end
.do end
.if '&arch' eq '32-bit' .do begin
.code begin
~.387
~.386p
PUBLIC FMAIN
EXTRN `RT@IOWrite`:BYTE
EXTRN `RT@OutCHAR`:BYTE
EXTRN `RT@EndIO`:BYTE
EXTRN __init_error:BYTE
EXTRN __init_english:BYTE
EXTRN __init_387_emulator:BYTE
EXTRN _cstart_:BYTE
DGROUP GROUP CONST,_DATA,_BSS
CONST SEGMENT PARA PUBLIC USE32 'DATA'
L$1:
DB 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f
DB 0x72, 0x6c, 0x64
CONST ENDS
.code break
_DATA SEGMENT PARA PUBLIC USE32 'DATA'
L$2:
DD L$1
DB 0x0b, 0x00, 0x00, 0x00
_DATA ENDS
_BSS SEGMENT PARA PUBLIC USE32 'BSS'
_BSS ENDS
_TEXT SEGMENT BYTE PUBLIC USE32 'CODE'
ASSUME CS:_TEXT, DS:DGROUP, SS:DGROUP
FMAIN:
CALL near ptr `RT@IOWrite`
MOV EAX,offset L$2
CALL near ptr `RT@OutCHAR`
JMP near ptr `RT@EndIO`
_TEXT ENDS
END
.code end
.do end
.do end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -