Download - Symbolsk maskinsprog
![Page 1: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/1.jpg)
Symbolsk maskinsprog
![Page 2: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/2.jpg)
Niveauer af abstrakte maskiner
Spørgsmål ...
Hvordan bruges asm-niveauet?
metode til programmering (i dag)
Hvordan stilles asm-niveauet tilrådighed?
oversættelse af symbolsk maskinsprogtil absolut maskinsprog (næste gang)
![Page 3: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/3.jpg)
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // }
.method min // int min
.args 3 // ( int a, int b ){
.define a = 1
.define b = 2
.locals 1 // int r;
.define r = 3
iload a // if ( a >= b ) iload b isub
// stack = a - b, ... ; a - b < 0 => a < b
iflt else
iload b // r = b; istore r goto end_if
else: // else iload a // r = a; istore r
end_if: iload r // return r; ireturn
// }
main index: 0method area: 40 bytes00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 0300 01 15 01 15 02 64 9b 00 0a 15 02 36 03 a7 0007 15 01 36 03 15 03 acconstant pool: 2 words000000000000000e
Maskinsprog
Symbolsk maskinsprog
![Page 4: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/4.jpg)
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // }
.method min // int min
.args 3 // ( int a, int b ){
.define a = 1
.define b = 2
.locals 1 // int r;
.define r = 3
iload a // if ( a >= b ) iload b isub
// stack = a - b, ... ; a - b < 0 => a < b
iflt else
iload b // r = b; istore r goto end_if
else: // else iload a // r = a; istore r
end_if: iload r // return r; ireturn
// }
Symbolsk maskinsprogSymbolske ordrer
1-1 afbildning mellem maskinordre og symbolsk maskinordre
![Page 5: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/5.jpg)
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // }
.method min // int min
.args 3 // ( int a, int b ){
.define a = 1
.define b = 2
.locals 1 // int r;
.define r = 3
iload a // if ( a >= b ) iload b isub
// stack = a - b, ... ; a - b < 0 => a < b
iflt else
iload b // r = b; istore r goto end_if
else: // else iload a // r = a; istore r
end_if: iload r // return r; ireturn
// }
main index: 0method area: 40 bytes00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 0300 01 15 01 15 02 64 9b 00 0a 15 02 36 03 a7 0007 15 01 36 03 15 03 acconstant pool: 2 words000000000000000e
Maskinsprog
Hvor finder du bipush 88 ?
?
![Page 6: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/6.jpg)
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // }
.method min // int min
.args 3 // ( int a, int b ){
.define a = 1
.define b = 2
.locals 1 // int r;
.define r = 3
iload a // if ( a >= b ) iload b isub
// stack = a - b, ... ; a - b < 0 => a < b
iflt else
iload b // r = b; istore r goto end_if
else: // else iload a // r = a; istore r
end_if: iload r // return r; ireturn
// }
Symbolsk maskinsprogSymbolske ordrer
bipush, iload 1-1 afbildning
Direktiver/pseudoinstruktioner.define a=1 symbolsk konstant.method min metode start.args 3 antal argumenter.locals 1 antal lokale variable
![Page 7: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/7.jpg)
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // }
.method min // int min
.args 3 // ( int a, int b ){
.define a = 1
.define b = 2
.locals 1 // int r;
.define r = 3
iload a // if ( a >= b ) iload b isub
// stack = a - b, ... ; a - b < 0 => a < b
iflt else
iload b // r = b; istore r goto end_if
else: // else iload a // r = a; istore r
end_if: iload r // return r; ireturn
// }
Symbolsk maskinsprogSymbolske ordrer
bipush, iload 1-1 afbildning
Direktiver/pseudoinstruktioner.define a=1 symbolsk konstant.method min metode start.args 3 antal argumenter.locals 1 antal lokale variable
Labelselse:end_if:
![Page 8: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/8.jpg)
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // }
.method min // int min
.args 3 // ( int a, int b ){
.define a = 1
.define b = 2
.locals 1 // int r;
.define r = 3
iload a // if ( a >= b ) iload b isub
// stack = a - b, ... ; a - b < 0 => a < b
iflt else
iload b // r = b; istore r goto end_if
else: // else iload a // r = a; istore r
end_if: iload r // return r; ireturn
// }
Symbolsk maskinsprogSymbolske ordrer
bipush, iload 1-1 afbildning
Direktiver/pseudoinstruktioner.define a=1 symbolsk konstant.method min metode start.args 3 antal argumenter.locals 1 antal lokale variable
Labelselse:end_if:
Symbolske operandera, b, r symbolske konstantmin metodenavnelse, end_if label
![Page 9: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/9.jpg)
Pentium symbolsk maskinsprog
.section .data # start of data sectiona: .long 42 # variable ab: .long 53 # variable bm: .long 0 # variable m
.section .text # start of text section
.globl _start # _start is a global symbol# specifying program start
_start: # int main (void) movl a, %eax # movl b, %ebx # cpml %eax, %ebx # compute b-a <= 0 and
# set eflags jle if # if (a >= b) jmp else
if: movl %eax, m # m = a jmp endif
# elseelse: movl %ebx, m # m = b
endif: movl m, %ebxmovl $1, %eaxint $0x80 # return m
![Page 10: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/10.jpg)
Pentium symbolsk maskinsprog
.section .data # start of data sectiona: .long 42 # variable ab: .long 53 # variable bm: .long 0 # variable m
.section .text # start of text section
.globl _start # _start is a global symbol
# specifying program start
_start: # int main (void) movl a, %eax # movl b, %ebx # cpml %eax, %ebx # compute b-a <= 0 and
# set eflags jle if # if (a >= b) jmp else
if: movl %eax, m # m = a jmp endif
# elseelse: movl %ebx, m # m = b
endif: movl m, %ebx movl $1, %eax int $0x80 # return m
Symbolske ordrermovl, cpml, jle, ...
Direktiver.section.globl
Labels_start:if:
Symbolske operandera, b, m%eax, %ebx
Samme struktur som program i IJVM symbolsk maskinsprog
![Page 11: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/11.jpg)
SCO figur 7.2
Forsk
ellige assemb
leres realiserin
g af N =
I + J
![Page 12: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/12.jpg)
Symbolske maskinsprogAsm-niveauet realiseres af assembleren. Der kan sagtens være flere realiseringen ovenpå samme ISA-niveau ...
.method min // int min
.args 3 // ( int a, int b ){
.define a = 1
.define b = 2
.locals 1 // int r;
.define r = 3
iload a // if ( a >= b ) iload b isub iflt else iload b // r = b; istore r goto end_ifelse: // else iload a // r = a; istore rend_if: iload r // return r; ireturn
// }
.def min[3,1] # int min
.eq a = 1
.eq b = 2
.eq r = 3
ld a # if ( a >= b ) ld b sub iflt else ld b # r = b; sto r jmp end_ifelse: # else ld a # r = a; sto rend_if: ld r # return r; ret
# }
Forskellige direktiver, symbolsk ordrenavne, ...
![Page 13: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/13.jpg)
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 iload a iload b invokevirtual min ireturn // return min ( a, b ); // }.method min // int min.args 3 // ( int a, int b ){.define a = 1.define b = 2.locals 1 // int r;.define r = 3
iload a // if ( a >= b ) iload b isub iflt else iload b // r = b; istore r goto end_ifelse: // else iload a // r = a; istore rend_if: iload r // return r; ireturn // }
![Page 14: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/14.jpg)
_main index_ 0
_method area_
00 0300 00
bipush 88iload 1iload 2invokevirtual 1ireturn
00 0300 01
iload 1iload 2isubiflt 10iload 2istore 3goto 7iload 1istore 3iload 3ireturn
_constant pool_
000000000000000e
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 iload a iload b invokevirtual min ireturn // return min ( a, b ); // }.method min // int min.args 3 // ( int a, int b ){.define a = 1.define b = 2.locals 1 // int r;.define r = 3
iload a // if ( a >= b ) iload b isub iflt else iload b // r = b; istore r goto end_ifelse: // else iload a // r = a; istore rend_if: iload r // return r; ireturn // }
![Page 15: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/15.jpg)
_main index_ 0
_method area_
00 0300 00
bipush 88iload 1iload 2invokevirtual 1ireturn
00 0300 01
iload 1iload 2isubiflt 10iload 2istore 3goto 7iload 1istore 3iload 3ireturn
_constant pool_
000000000000000e
.method main // int main
.args 3 // ( int a, int b )
.define a = 1
.define b = 2 // { bipush 88 iload a iload b invokevirtual min ireturn // return min ( a, b ); // }.method min // int min.args 3 // ( int a, int b ){.define a = 1.define b = 2.locals 1 // int r;.define r = 3
iload a // if ( a >= b ) iload b isub iflt else iload b // r = b; istore r goto end_ifelse: // else iload a // r = a; istore rend_if: iload r // return r; ireturn // }
“Abstraktionsniveauet” i det symbolske maskin- sprog bestemmes af assembleren ...
![Page 16: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/16.jpg)
Et symbolsk maskinsprog til IJVM (dComNet-nr.2)
![Page 17: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/17.jpg)
![Page 18: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/18.jpg)
Programmering i symbolsk maskinsprog
... Effektive og maskinnære programmer, men besværligt ...
... skal bruges med omtanke ...
... programmering af ydre enheder, oversættere ...
![Page 19: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/19.jpg)
Programmering i symbolsk maskinsprogint main(){ return gcd(2,3);}
int gcd(int x, int y){ while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x;}
... systematisk oversættelse af højniveau-konstruktioner ...
metoder med parameteroverførelsevariabel erklæringer med simple typerkontrol strukturer; if-then-else, while
beregning af betingelser og udtryk
![Page 20: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/20.jpg)
dComNet-nr.1
![Page 21: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/21.jpg)
![Page 22: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/22.jpg)
![Page 23: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/23.jpg)
Eksempel
int main(){ return gcd(2,3);}
int gcd(int x, int y){ while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x;}
![Page 24: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/24.jpg)
int gcd(int x, int y){ while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x;}
.method gcd // int gcd
.args 3 // ( int x, int y)
.locals 0
.define x = 1
.define y = 2 // {
... // }
Metode
![Page 25: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/25.jpg)
Metode – Ordning af parametre
Vigtigt at have en konvention for rækkefølgen!!
Caller's LVCaller's PC
xy
Link prt
SP
LV
Caller's LVCaller's PC
yx
Link prt
SP
LV
+2+1
+2+1
.method gcd // int gcd
.args 3 // ( int x, int y)
.locals 0
.define x = 1
.define y = 2 // {... // }
![Page 26: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/26.jpg)
Metode – Ordning af parametre
IJVM konvention
.method gcd // int gcd
.args 3 // ( int x, int y)
.locals 0
.define x = 1
.define y = 2 // {... // }
Caller's LVCaller's PC
xy
Link prt
SP
LV
Caller's LVCaller's PC
yx
Link prt
SP
LV
+2+1
+2+1
![Page 27: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/27.jpg)
int gcd(int x, int y){ while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x;}
Metode
Caller's LVCaller's PC
yx
Link prt
SP
LV
+2+1
.method gcd // int gcd
.args 3 // ( int x, int y)
.locals 0
.define x = 1
.define y = 2 // {
... // }
![Page 28: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/28.jpg)
int imul(int a, int b){ int p;
p = 0; while ( a < 0 ){ a = a - 1; p = p + b; } return p;}
Sidemandsopgave
Caller's LVCaller's PC
yx
Link prt
SP
LV
+2+1
??? // {
... // }
Over sæt
![Page 29: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/29.jpg)
int gcd(int x, int y){ while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x;}
while: // while iload x iload y if_icmpeq end_while // ( x != y ) // { ...
goto while // }
end_while:
Kontrolstruktur / while-løkke
![Page 30: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/30.jpg)
int imul(int a, int b){ int p;
p = 0; while ( a < 0 ){ a = a - 1; p = p + b; } return p;}
Sidemandsopgave
??? // {
... // }
Over sæt
![Page 31: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/31.jpg)
int gcd(int x, int y){ while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x;}
iload x // if iload y isub// stack = x-y, x-y < 0 => ( x < y ) iflt then goto elsethen: // { ...
goto end_if // }else: // else ... // { // }end_if:
...
Kontrolstruktur / if-then-else
![Page 32: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/32.jpg)
int gcd(int x, int y){ while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x;}
iload y iload x isub istore y // y = y - x;
iload x iload y isub istore x // x = x - y;
iload xireturn // return x;
Beregning af udtryk, variabletildeling og returnværdi
![Page 33: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/33.jpg)
int imul(int a, int b){ int p;
p = 0; while ( a < 0 ){ a = a - 1; p = p + b; } return p;}
Sidemandsopgave
??? // {
... // }
Over sæt
![Page 34: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/34.jpg)
int main(){ return gcd(2,3);}
.method main // int main()
.args 1
.locals 0 //{// push object reference bipush 88// push arguments bipush 2 bipush 3 invokevirtual gcd ireturn // return gcd(2,3) // }
Metode og metodekald
Caller's LVCaller's PC
yx
Link prt
SP
LV
+2+1
![Page 35: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/35.jpg)
int main(){ return imul(2,3);}
???
Sidemandsopgave
Caller's LVCaller's PC
ba
Link prt
SP
LV
+2+1Over
sæt
![Page 36: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/36.jpg)
// Greatest common divisor.
.method gcd // int gcd
.args 3 // ( int x. int y)
.define x = 1
.define y = 2// {
while: // while iload x iload y if_icmpeq end_while // ( x != y )
// { iload x // if iload y isub // stack = x-y, x-y < 0 => ( x < y ) iflt then goto elsethen: // { iload y iload x isub istore y // y = y - x; goto end_if // }else: // else iload x // { iload y isub istore x // x = x - y;
// }end_if: goto while // }end_while: iload x ireturn // return x;
// }.method main bipush 88 bipush 2 bipush 3 invokevirtual gcd ireturn // return gcd(2,3)
![Page 37: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/37.jpg)
ijvm-asm gcd.j gcd.bc
ijvm gcd.bc
gcd.j
oversættes til
fortolkes af
IJVM maskine
main index: 1method area: 59 bytes00 03 00 00 15 01 15 02 9f 00 22 15 01 15 02 649b 00 06 a7 00 0d 15 02 15 01 64 36 02 a7 00 0a15 01 15 02 64 36 01 a7 ff dd 15 01 ac 00 01 0000 10 58 10 02 10 03 b6 00 00 acconstant pool: 2 words000000000000002d
![Page 38: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/38.jpg)
IJVM Trace of gcd.bc
stack = 0, 1, 18 1:bipush 88 [10 58] stack = 88, 0, 1, 18 2:bipush 2 [10 02] stack = 2, 88, 0, 1, 18 3:bipush 3 [10 03] stack = 3, 2, 88, 0, 1, 18 4:invokevirtual 0 [b6 00 00] stack = 17, 58, 3, 2, 23, 0, 1, 18 5:iload 1 [15 01] stack = 2, 17, 58, 3, 2, 23, 0, 1 6:iload 2 [15 02] stack = 2, 2, 17, 58, 3, 2, 23, 0 7:if_icmpeq 34 [9f 00 22] stack = 17, 58, 3, 2, 23, 0, 1, 18 8:iload 1 [15 01] stack = 2, 17, 58, 3, 2, 23, 0, 1 9:iload 2 [15 02] stack = 3, 2, 17, 58, 3, 2, 23, 010:isub [64] stack = -1, 17, 58, 3, 2, 23, 0, 111:iflt 6 [9b 00 06] stack = 17, 58, 3, 2, 23, 0, 1, 1812:iload 2 [15 02] stack = 3, 17, 58, 3, 2, 23, 0, 113:iload 1 [15 01] stack = 2, 3, 17, 58, 3, 2, 23, 014:isub [64] stack = 1, 17, 58, 3, 2, 23, 0, 115:istore 2 [36 02] stack = 1, 17, 58, 1, 2, 23, 0, 1, 1816:goto 10 [a7 00 0a] stack = 17, 58, 1, 2, 23, 0, 1, 1817:goto -35 [a7 ff dd] stack = 17, 58, 1, 2, 23, 0, 1, 1818:iload 1 [15 01] stack = 2, 17, 58, 1, 2, 23, 0, 119:iload 2 [15 02] stack = 1, 2, 17, 58, 1, 2, 23, 020:if_icmpeq 34 [9f 00 22] stack = 17, 58, 1, 2, 23, 0, 1, 1821:iload 1 [15 01] stack = 2, 17, 58, 1, 2, 23, 0, 122:iload 2 [15 02] stack = 1, 2, 17, 58, 1, 2, 23, 023:isub [64] stack = -1, 17, 58, 1, 2, 23, 0, 124:iflt 6 [9b 00 06] stack = 17, 58, 1, 2, 23, 0, 1, 1825:goto 13 [a7 00 0d] stack = 17, 58, 1, 2, 23, 0, 1, 1826:iload 1 [15 01] stack = 2, 17, 58, 1, 2, 23, 0, 127:iload 2 [15 02] stack = 1, 2, 17, 58, 1, 2, 23, 028:isub [64] stack = 1, 17, 58, 1, 2, 23, 0, 129:istore 1 [36 01] stack = 17, 58, 1, 1, 23, 0, 1, 1830:goto -35 [a7 ff dd] stack = 17, 58, 1, 1, 23, 0, 1, 1831:iload 1 [15 01] stack = 1, 17, 58, 1, 1, 23, 0, 132:iload 2 [15 02] stack = 786, 1, 17, 58, 1, 1, 23, 033:if_icmpeq 34 [9f 00 22] stack = 17, 58, 1, 1, 23, 0, 1, 1834:iload 1 [15 01] stack = 1, 17, 58, 1, 1, 23, 0, 135:ireturn [ac] stack = 1, 0, 1, 1836:ireturn [ac] stack = 1
Diskutér m
ed din sidemandd: D
er er fire fejl på stakken – hvilke og hvad er det rigtige?
ijvm gcd.bc
![Page 39: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/39.jpg)
Afprøvning af programmer
Ekstern afprøvning
Sammenlign et af programmet beregnet resultat med kendt og korrekt resultat ...
Intern afprøvning
Alle dele af programmet skal være gennemløbet og alle betingede hop skal være afviklet med betingelsen opfyldt og ikke opfyldt ...
![Page 40: Symbolsk maskinsprog](https://reader036.vdocuments.site/reader036/viewer/2022081513/5681499e550346895db6e02a/html5/thumbnails/40.jpg)
Arbejdsgang ...
Evt. optimeringer foretages altid på et korrekt program ...
Tag udgangspunkt i et C/java program
Oversæt systematisk til symbolsk maskinsprog
Kommenter med C/java programmet
Afprøv programmet eksternt og internt