Сборный / Говнокод #27992 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
.org 80h
data:
	db "Hello, world!\n"
	db 0h
start:
	mov %bp @data
	; jmp @.exit ;
	.loop:
		mov %al [%si + %bp]
		inc %si
		cmp %al 0h
		int 5h ;KOKOKO make me port-mapped io;
		jnz @.loop
	.exit:
		int 0h


32 31 44 41 54 41 3A 30 30 38 30 3B 53 54 41 52 
54 3A 30 30 38 45 3B 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 48 65 6C 6C 6F 20 77 6F 72 
6C 64 21 0A 00 02 06 80 00 03 0A 38 09 05 0C 0A
00 00 0B 05 0F 92 00 0B 00

добавил комментарии, теперь можно будет красиво рисовать фреймы (радуйтесь)

digitalEugene digitalEugene, (Updated )

Комментарии (1, +1)

Сборный / Говнокод #27966 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
.org 80h
fib:
	push %b
	push %d
	push %c
	mov %d [%sp + 8h]
	mov %b 1h
	mov %a 0h
	
	.loop:
		add %b %a
		mov %c %a
		mov %a %b
		sub %a %c
		dec %d
		jnz @.loop
	
	pop %c
	pop %d
	pop %b
	ret

start:
	mov %sp 2000h
	push Fh
	call @fib
	pop

	int 0h

один чел захотел написать для моей вмки компилятор лиспоподобного языка с некими S-выражениями и попросил пример вычисления ряда фибоначчи.
пришлось накопипастить с вики.

digitalEugene digitalEugene, (Updated )

Комментарии (5, +5)

Сборный / Говнокод #43

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
.org 80h
fib:
	push %b
	push %d
	push %c
	mov %d [%sp + 8h]
	mov %b 1h
	mov %a 0h
	
	.loop:
		add %b %a
		mov %c %a
		mov %a %b
		sub %a %c
		dec %d
		jnz @.loop
	
	pop %c
	pop %d
	pop %b
	ret

start:
	mov %sp 2000h
	push Fh
	call @fib
	pop

	int 0h

один чел захотел написать для моей вмки компилятор лиспоподобного языка с некими S-выражениями и попросил пример вычисления ряда фибоначчи.
пришлось накопипастить с вики.

kcalbCube kcalbCube,

Комментарии (0)

Сборный / Говнокод #27884 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
.MODEL small ;отводим под стек и под данные по 64Кб код занимает 1 сегмент, данные и стек обьеденены в одну группу
.STACK 100h ;отмечаем начало сегмента стека
.DATA ;отмечаем начало сегмента данных
 
_STDOUT_ equ 1 ; из синтаксического описания видно, что с помощью equ идентификатору 
;можно ставить в соответствие как числовые выражения, так и текстовые строки, 
    ;а псевдооператор “=” может использоваться только с числовыми выражениями;
vivod db 0Dh, 0Ah, '$' ; $-кон. стр.
 
String db 82 dup(?); выделение памяти для строки 
PosLen db 14 dup(?); выделение памяти для строки (числа)
Pos dw ? ; память для первого числа
Len dw ? ; для второго
 
.CODE ;отмечаем начало сегмента кодов
preob proc ; процедура преобразования из строки в число
xor ax, ax
mov bx, ax
mov cx, 10 ; для реализации цикла
_repeat:
mov bl, [si] ; помещаем в bl символ строки
inc si ; в si переходим к ячейке следующего символа
sub bl, '0'; преобразуем ASCII код в число
jb _break ; если SF = 1 то выходим из процедуры(указывает, что между числами стоит пробел, числовой код пробела меньше числового кода нуля)
cmp bl, 9 ; сравниваем, если число больше 9 - то это символ - идём на выход
ja _break
mul cx
add ax, bx ;прибавляет в регистр ax нужное число
jmp _repeat
_break:
ret ; возврат в в главный код
preob endp
 
main PROC
;инициализация сегментного регистра ds адресом сегмента данных
mov ax, @data
mov ds, ax
 
;ввод строки
mov [String], byte ptr 80
mov ah, 0Ah
lea dx, [String]
int 21h
 
;ввод строки чисел
mov al,10 ; перенос строки
int 29h ; быстрый вывод символов на экр(экон байт)
mov [PosLen], byte ptr 14
mov ah, 0Ah
 
lea dx, [PosLen]
int 21h
 
;преобразование строки в первое число
lea si, [PosLen+2]
call preob
mov [Pos], ax
call preob
mov [Len], ax
 
mov al,10 ; перенос строки
int 29h ; быстрый вывод символов на экр(экон байт)
mov ah, 40h ;номер функции помещается в ah
mov bx, _STDOUT_ ;в bx хранится дескриптор стандартного выходного потока
mov cx, [Len] ; кол-во выводимых символов
lea dx, [String+1] ; адрес буфера вывода
add dx, [Pos] ; берем 1 сим. и добавляем число, чтобы перейти к нужному нам символу
int 21h 
 
;завершение программы
xor ax,ax
int 16h
mov ax,4c00h
int 21h
MAIN ENDP
END MAIN

Помогите разобраться в коде, понять логику
Задание: Ввести с клавиатуры строку и строку из двух чисел. Первое число ука- зывает начало подстроки для ввода на экран, второе количество символов из пер- вой строки, которое необходимо вывести на экран.

tuple tuple, (Updated )

Комментарии (200, +200)

Сборный / Говнокод #27782 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
.org 80h
data:
	db "Hello, world!\n"
	db 0
start:
	mov %c 1h
	mov %bp @data
	mov %si 0
	.loop:
		mov %al [%si + %bp]
		inc %si
		cmp %al 0h
		jz @.exit
		int 5h
		jmp @.loop
	.exit:
	int 0h

  0080  48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0A 00 02 02
  0090  01 00 02 06 80 00 02 05 00 00 03 0A 38 09 05 0C
  00A0 0A 00 00 0E AB 00 0B 05 0D 9A 00 0B 00 00 00 00

накодил виртуальную машину, заспидранил Hello World за четыре дня. рекорд.
https://github.com/kcalbSphere/PVC-16

digitalEugene digitalEugene, (Updated )

Комментарии (27, +27)

Сборный / Говнокод #27567 Ссылка на оригинал

0

  1. 1
– Вот то-то и оно… – проговорила, Марго вытирая салфеткой губы, – любишь. А эта блядища этого не ценит!

- Давай-ка задом, мила, - я шлёпнул Елену по ляжке, и она неловко перевернулась, встала на колени, высоко подняла зад.

Chupacabramiamor Chupacabramiamor, (Updated )

Комментарии (0)

Сборный / Говнокод #27418 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
.ALIAS HALT 10h
.ALIAS VBI   0h
.ALIAS VPUSCRADDR 3000h
.ALIAS VPUATRADDR 3002h
.ALIAS VPUCTRL 3004h
.ALIAS VPUCTRL_WH 3005h
.ALIAS VPUCTRL_F 3006h
.ALIAS VPUCTRL_VBI 0
.ALIAS VPUCTRL_ACT 1
.ALIAS VPUCTRL_TICK 2

.ALIAS W 10
.ALIAS H 5

.ALIAS I   %BL
.ALIAS PTR %C

.ORG 2000h SCR:
.ORG 2100h ATR:

.ORG #VBI
DD @VBI

.ORG 30h
DATA:

.ORG 40h
STATE:
	X: DB 0
	
.ORG 80h
_START:
	SET   %AL #VPUCTRL_VBI
	SET   %AL #VPUCTRL_ACT
	STORE %AL #VPUCTRL_F
	MOV   %AL #H
	SHL   %AL 4
	OR    %AL #W

	STORE %AL #VPUCTRL_WH
	
	MOV   %A @SCR
	STORE %A #VPUSCRADDR
	MOV   %A @ATR
	STORE %A #VPUATRADDR
	
	LOAD  %AL #VPUCTRL_F
	SET   %AL #VPUCTRL_TICK
	STORE %AL #VPUCTRL_F
	STORE %AL #VPUCTRL_F
	LOOP:
	JMP @LOOP

VBI:
	PUSH  %A
	PUSH  %B
	PUSH  %C
	
	LOAD  %AL @X
	ADD   %AL 1
	
	CMP   %AL #W JNE @VBI_CONTINUE
	XOR   %AL %AL     VBI_CONTINUE:
	STORE %AL @X
	
	CMP   %AL 0  JNE @VBI_ELSE
		MOV   #PTR @SCR
		ADD   #PTR #W
		SUB   #PTR 1
		STORE #PTR %AL 
		JMP @VBI_SKIP
	
	VBI_ELSE:
		MOV   #PTR @SCR
		ADD   #PTR %AL
		SUB   #PTR 1
		MOV   %BH 0
		STORE #PTR %BH
	VBI_SKIP:

	MOV   #PTR @SCR
	ADD   #PTR %AL
	MOV   %BH  FFh
	STORE #PTR %BH
	
	POP %C
	POP %B
	POP %A
	RET

похождения моей ебанутой вмки продолжаются.
bormand сказало что писать подставным прерыванием в консольку это читерство. реализовал видеовывод. теперь нормально? (слегка криво, и на
атрибуты вмке похуй, как и мне.)

вопреки моим огромным сомнениям, выдает 600 фпс даже на моей скромной конфигурации.

https://imgur.com/fdLlQvx

digitalEugene digitalEugene, (Updated )

Комментарии (9, +9)

Сборный / Говнокод #27218 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
format PE64 GUI 5.0
include 'win64a.inc'
entry $
   xor    rdi,rdi
   push   rdi
   push   rdi
   push   rdi;$400000
   push   rdi
   push   rdi
   mov    rax,CW_USEDEFAULT
   push   rax
   push   rax
   push   rax
   push   rax
   push   rdi
   push   rdi
   push   rdi
   push   rdi
   mov    r9,WS_VISIBLE+WS_OVERLAPPEDWINDOW
   mov    r8,_title
   mov    rdx,_class
   mov    rcx,rdi
   call   [CreateWindowEx]
   mov    r8,WindowProc
   mov    rdx,-4
   mov    rcx,rax
   call   [SetWindowLongPtrA]
   mov    qword[_title],rax
   pop    rdi
   mov    rsi,rsp
   xor    rbx,rbx
   mov    bl,40
@@:sub    rsp,rbx
   xor    r9,r9
   xor    r8,r8
   xor    rdx,rdx
   mov    rcx,rsi
   call   [GetMessage]
   mov    rcx,rsi
   call   [DispatchMessage]
   add    rsp,rbx
   jmp    @b
WindowProc:
   push   r9
   cmp    rdx,WM_CLOSE
   je     app_close
defwndproc:
   push   rdi
   push   rdi
   push   rdi
   push   rdi
   mov    r9,r8
   mov    r8,rdx
   mov    rdx,rcx
   mov    rcx,qword[_title]
   call   [CallWindowProc]
   pop    rdi
   pop    rdi
   pop    rdi
   pop    rdi
   pop    rdi
   ret
app_close:
   call   [exit]
  _title db '1KBytex64',0
  _class db '#32770',0
data import
  library\
    user32,'USER32.DLL',\
    msvcrt,'msvcrt.dll'
  include 'api\user32.inc'
  import msvcrt,\
    exit,'_exit'
end data

Ничего интересного, просто извращённый 1KBytex64

chiacorp chiacorp, (Updated )

Комментарии (3, +3)

Сборный / Говнокод #27216 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
format pe console
   include 'win32ax.inc'
macro call1 f,p1{
   mov    ebx,p1
   call   f}
macro call2 f,p1,p2{
   mov    ecx,p2
   call1  f,p1}
macro call3 f,p1,p2,p3{
   mov    edx,p3
   call2  f,p1,p2}
.data
   lead_time dd ?
   handle_input dd ?
   handle_output dd ?
   byte_read_write dd ?
.code
   string db 'govnokod.ru ',13,10,0
   array_procs dd __strlen,_strlen,strlen,0
putdword:;ebx-handle,ecx-byte
   mov    eax,esp
   mov    esi,eax
   sub    esp,16
   xchg   eax,ecx
   mov    edi,10
@@:xor    edx,edx
   div    edi
   add    dl,'0'
   dec    ecx
   mov    [ecx],dl
   test   eax,eax
   jnz    @b
   sub    esi,ecx
   mov    edx,esi
   invoke WriteFile,ebx,ecx,edx,byte_read_write,0
   add    esp,16
   ret
align 4
strlen:;ebx-array of char
   mov    eax,12
   ret
align 4
_strlen:;ebx-array of char
   clc
   xor    ecx,ecx
   dec    ecx
   mov    edi,ebx
   xor    al,al
   repne  scasb
   not    ecx
   dec    ecx
   mov    eax,ecx
   ret
align 4
__strlen:;ebx-array of char
   xor    eax,eax
   dec    eax
@@:inc    eax
   cmp    byte[ebx+eax],0
   jne    @b
   ret
start:
   invoke GetStdHandle,STD_INPUT_HANDLE
   mov    [handle_input],eax
   invoke GetStdHandle,STD_OUTPUT_HANDLE
   mov    [handle_output],eax
   mov    ebp,array_procs
next_step:
   call   [GetTickCount]
   mov    [lead_time],eax
   xor    ecx,
@@:push   ecx
   mov    ebx,string
   call   dword[ebp]
   pop    ecx
   loop   @b
   push   eax
   call   [GetTickCount]
   sub    eax,[lead_time]
   mov    ecx,1000
   xor    edx,edx
   div    ecx
   push   edx
   call2  putdword,[handle_output],eax
   invoke WriteFile,ebx,string+8,1,byte_read_write,0
   pop    ecx
   call2  putdword,[handle_output],ecx
   invoke WriteFile,ebx,string+11,1,byte_read_write,0
   pop    ecx
   call2  putdword,[handle_output],ecx
   invoke WriteFile,[handle_output],string+12,2,byte_read_write,0
   add    ebp,4
   cmp    dword[ebp],0
   jne    next_step
   call   [GetTickCount]
   mov    [lead_time],eax
   invoke SetConsoleMode,[handle_input],0
   invoke ReadFile,[handle_input],byte_read_write,1,byte_read_write,0
   invoke ExitProcess,0
.end start

Поговнокодим однако.
Зачем в процессоре занимают место команды типа repne scasb и прочее, если простые аналоги быстрее компактнее и проще встраивать в алгоритм без отдельной подпрограммы да и регистров в разы меньше требуется. Пустая подпрограмма для понимания сколько времени занимает лишний код. Есть предположение что раньше на заре развития они работали шустрее, но это только предположение.

chiacorp chiacorp, (Updated )

Комментарии (12, +12)

Сборный / Говнокод #27205 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
includelib  C:\Irvine\User32.Lib
includelib  C:\Irvine\Kernel32.Lib
includelib  D:\masm32\lib\Irvine32.lib
include     \masm32\include\Irvine32.inc

; D:/masm32/bin/ml.exe /c  /coff  "D:\asm\rcl.asm"
; D:/masm32\bin\link.exe /subsystem:console  "D:\asm\rcl.obj"

.data

  
.code
main PROC
  xor eax, eax
  xor edx , edx
  
  mov al , 10101010b
  
  cmp al,80h
  jns just
  shr al,1
  jmp print
  
  just:
 
  shr al,1
  or ax,80h
 
  print:
  call WriteBin
		
	exit
	main ENDP
END main

Дай бог здоровья товарищу Ирвину.

Madhouse_camomile Madhouse_camomile, (Updated )

Комментарии (18, +18)