summary refs log tree commit diff stats
path: root/changelogs/readme.md
blob: 3ff1e1b7b83ba9f479dbd1977736bf4d3e88a7b7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Update changelog
After each release, call:
```
git mv changelog.md changelogs/changelog_0_19_0.md # use correct version
cp changelogs/changelog_X_XX_X.md changelog.md
git add changelog.md
```

## Recent changelogs are saved here (with their git history)

## Older changelogs are stored in https://github.com/nim-lang/website

## source files:
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2009-12-21-version-086-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2010-03-14-version-088-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2010-10-20-version-0810-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2011-07-10-version-0812-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2012-02-09-version-0814-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2012-09-23-version-090-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2013-05-20-version-092-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2014-04-21-version-094-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2014-10-19-version-096-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2014-12-29-version-0102-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2015-04-30-version-0110-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2015-05-04-version-0112-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2015-10-27-version-0120-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2016-01-18-version-0130-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2016-06-07-version-0140-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2016-06-09-version-0142-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2016-09-30-version-0150-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2016-10-23-version-0152-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2017-01-08-version-0160-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2017-05-17-version-0170-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2017-09-07-version-0172-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2018-03-01-version-0180-released.md
* https://github.com/nim-lang/website/blob/master/jekyll/_posts/2018-09-26-version-0190-released.md

## urls:
* https://nim-lang.org/blog/2009/12/21/version-086-released.html
* https://nim-lang.org/blog/2010/03/14/version-088-released.html
* https://nim-lang.org/blog/2010/10/20/version-0810-released.html
* https://nim-lang.org/blog/2011/07/10/version-0812-released.html
* https://nim-lang.org/blog/2012/02/09/version-0814-released.html
* https://nim-lang.org/blog/2012/09/23/version-090-released.html
* https://nim-lang.org/blog/2013/05/20/version-092-released.html
* https://nim-lang.org/blog/2014/04/21/version-094-released.html
* https://nim-lang.org/blog/2014/10/19/version-096-released.html
* https://nim-lang.org/blog/2014/12/29/version-0102-released.html
* https://nim-lang.org/blog/2015/04/30/version-0110-released.html
* https://nim-lang.org/blog/2015/05/04/version-0112-released.html
* https://nim-lang.org/blog/2015/10/27/version-0120-released.html
* https://nim-lang.org/blog/2016/01/18/version-0130-released.html
* https://nim-lang.org/blog/2016/06/07/version-0140-released.html
* https://nim-lang.org/blog/2016/06/09/version-0142-released.html
* https://nim-lang.org/blog/2016/09/30/version-0150-released.html
* https://nim-lang.org/blog/2016/10/23/version-0152-released.html
* https://nim-lang.org/blog/2017/01/08/version-0160-released.html
* https://nim-lang.org/blog/2017/05/17/version-0170-released.html
* https://nim-lang.org/blog/2017/09/07/version-0172-released.html
* https://nim-lang.org/blog/2018/03/01/version-0180-released.html
* https://nim-lang.org/blog/2018/09/26/version-0190-released.html
an class="w"> 0; if (base != EBP || mod != 0) { addr = Reg[base].u; trace(2, "run") << "effective address is initially 0x" << std::hex << addr << " (" << rname(base) << ")" << end(); } else { // base == EBP && mod == 0 addr = imm32(); // ignore base trace(2, "run") << "effective address is initially 0x" << std::hex << addr << " (disp32)" << end(); } uint8_t index = (sib>>3)&0x7; if (index == ESP) { // ignore index and scale trace(2, "run") << "effective address is 0x" << std::hex << addr << end(); } else { uint8_t scale = (1 << (sib>>6)); addr += Reg[index].i*scale; // treat index register as signed. Maybe base as well? But we'll always ensure it's non-negative. trace(2, "run") << "effective address is 0x" << std::hex << addr << " (after adding " << rname(index) << "*" << NUM(scale) << ")" << end(); } return addr; } :(scenario add_r32_to_mem_at_base_r32_index_r32) % Reg[3].i = 0x10; // source % Reg[0].i = 0x5e; // dest base % Reg[1].i = 0x2; // dest index % SET_WORD_IN_MEM(0x60, 1); # op ModR/M SIB displacement immediate 01 1c 08 # add EBX to *(EAX+ECX) # ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB) # SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX) +run: add EBX to r/m32 +run: effective address is initially 0x5e (EAX) +run: effective address is 0x60 (after adding ECX*1) +run: storing 0x00000011 :(scenario add_r32_to_mem_at_displacement_using_sib) % Reg[3].i = 0x10; // source % SET_WORD_IN_MEM(0x60, 1); # op ModR/M SIB displacement immediate 01 1c 25 60 00 00 00 # add EBX to *0x60 # ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB) # SIB in binary: 00 (scale 1) 100 (no index) 101 (not EBP but disp32) +run: add EBX to r/m32 +run: effective address is initially 0x60 (disp32) +run: effective address is 0x60 +run: storing 0x00000011 //: :(scenario add_r32_to_mem_at_base_r32_index_r32_plus_disp8) % Reg[3].i = 0x10; // source % Reg[0].i = 0x59; // dest base % Reg[1].i = 0x5; // dest index % SET_WORD_IN_MEM(0x60, 1); # op ModR/M SIB displacement immediate 01 5c 08 02 # add EBX to *(EAX+ECX+2) # ModR/M in binary: 01 (indirect+disp8 mode) 011 (src EBX) 100 (dest in SIB) # SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX) +run: add EBX to r/m32 +run: effective address is initially 0x59 (EAX) +run: effective address is 0x5e (after adding ECX*1) +run: effective address is 0x60 (after adding disp8) +run: storing 0x00000011 :(before "End Mod 1 Special-cases(addr)") case 4: // exception: mod 0b01 rm 0b100 => incoming SIB (scale-index-base) byte addr = effective_address_from_sib(mod); break; //: :(scenario add_r32_to_mem_at_base_r32_index_r32_plus_disp32) % Reg[3].i = 0x10; // source % Reg[0].i = 0x59; // dest base % Reg[1].i = 0x5; // dest index % SET_WORD_IN_MEM(0x60, 1); # op ModR/M SIB displacement immediate 01 9c 08 02 00 00 00 # add EBX to *(EAX+ECX+2) # ModR/M in binary: 10 (indirect+disp32 mode) 011 (src EBX) 100 (dest in SIB) # SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX) +run: add EBX to r/m32 +run: effective address is initially 0x59 (EAX) +run: effective address is 0x5e (after adding ECX*1) +run: effective address is 0x60 (after adding disp32) +run: storing 0x00000011 :(before "End Mod 2 Special-cases(addr)") case 4: // exception: mod 0b10 rm 0b100 => incoming SIB (scale-index-base) byte addr = effective_address_from_sib(mod); break;