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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
vbi:
	mov %al [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="596d1977342a3c2d">[email protected]</a>]
	inc %al
	mov [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d8ec98f6b5abbdac">[email protected]</a>] %al
	.mset: memset [@T1] 3A98h 0h
	rei

kcalbCube kcalbCube, (Updated )

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

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

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
.org 80h
inc:
	push %bp
	mov %bp %sp
	sub %sp 0010h
	mov [%bp + FFFEh] %sp
	mov [%bp + FFFCh] %b
	lea %a [%bp + FFFCh]
	mov %a [%a]
	push %a
	inc %a
	pop %si
	mov [%si] %a
	jmp @.return.inc
.return.inc:
	mov %sp %bp
	pop %bp
	ret
main:
	push %bp
	mov %bp %sp
	sub %sp 0010h
	mov [%bp + FFFCh] %sp
	memset [%bp + FFFEh] 0002h 0h
	lea %a [%bp + FFFEh]
	push %a
	mov %a 0000h
	pop %si
	mov [%si] %a
.L.begin.1:
	mov %a 0001h
	cmp %a 0h
	jz @.0
	lea %a [%bp + FFFEh]
	push %a
	pop %b
	call @inc
	push %a
	mov %a 0050h
	pop %si
	cmp %si %a
	jgz @.compare3
	mov %al 1h
	.compare3:
	mov %ah 0h
	cmp %a 0h
	jz  @.else.2
	jmp @.0
	jmp @.end.2
.else.2:
.end.2:
.1:
	jmp @.L.begin.1
.0:
.return.main:
	mov %sp %bp
	pop %bp
	ret
start:
	mov %sp FFFFh
	call @main
.return.start:
	int 0h

<-------------------->

short inc(short* i)
{
	return ++(*i);
}

void main(void)
{
	short i = 0s;
	while(1) 
	{
		if(inc(&i) > 0x50)
			break;
	}
}

void start(void)
{
	asm("mov %sp FFFFh");
	main();
}

да что вы знаете о неоптимизированном коде

kcalbCube kcalbCube, (Updated )

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

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

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
; %ch - x1, %cl - y1, %dh - x2, %dl - y2 ;
drawline:
	push %a
	push %b
	push %c
	push %d
	push %e
	
	mov %al %dh
	sub %al %ch
	call @abs
	mov %ah %al ; ah - dX ;
	
	mov %al %dl
	sub %al %cl
	call @abs
	neg %al ; al - -dY ;
	
	mov %bh FFh ; bh - signX;
	mov %bl FFh ; bl - signY ;
	
	cmp %ch %dh
	jgz @.S1
	neg %bh
	.S1:
	
	cmp %cl %dl
	jgz @.S2
	neg %bl
	.S2:
	
	mov %el %ah
	add %el %al ; el - error ;
	
	push %d
	call @drawpixel
	pop %d
	 
	.loop:
		cmp %ch %dh
		jnz @.L1
		cmp %cl %dl
		jnz @.L1
		jmp @.loop_end
		.L1:
		
		push %c
		call @drawpixel
		pop %c

		mov %eh %el
		
		cmp %eh %al
		jng @.L2
			add %el %al
			add %ch %bh
		.L2: 
		cmp %eh %ah
		jgz @.loop
			add %el %ah
			add %cl %bl
		jmp @.loop
		
	.loop_end:
	
	pop %e
	pop %d
	pop %c
	pop %b
	pop %a
	ret

https://pastebin.com/k8697fae

алгоритм брезенхема.

результат: https://imgur.com/a/c1twuNt

забавно что посреди тестов программа выдала красивые такие кривые на весь экран. с.м. имгур, приложил.

kcalbCube kcalbCube, (Updated )

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

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

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
.org 22h
dw @vbi

.org 80h
bpos: db 0h 0h
vector: db 2h 1h

process:
	push %a
	push %b
	mov %a [@bpos] ; {h:x, l:y} ;
	mov %b [@vector] ; {h:dx, l:dy} ;
	add %ah %bh
	add %al %bl
	cmp %ah 11h
	jng @.skip_xoverflow_handle
	cmp %ah 14h
	jg @.overflow_left
	mov %ah 11h
	jmp @.xoverflow_finally
	.overflow_left:
		mov %ah 0h
	.xoverflow_finally:
		neg %bh
	.skip_xoverflow_handle:
	cmp %al 5Ch
	jng @.skip_yoverflow_handle
	cmp %al 60h
	jg @.overflow_up
	mov %al 5Bh
	jmp @.yoverflow_finally
	.overflow_up:
		mov %al 1h
	.yoverflow_finally:
		neg %bl
	.skip_yoverflow_handle:
	mov [@bpos] %a
	mov [@vector] %b
	pop %b
	pop %a
	ret
	
cls:
	push %a
	push %b
	mov %a 3A98h
	
	.loop:
		mov [%a + @T1] 0000h
		sub %a 2h
		jnz @.loop 
	pop %b
	pop %a
	ret

render:
	push %a
	push %b
	push %c

	mov %a [@bpos]  ; {h:x, l:y} ;
	mov %b %al
	mul %b 12h
	add %b %ah
	add %b @T1
	
	mov %c 8h
	.loop:
		movb [%b] FFh
		add %b 12h
		dec %c
		jnz @.loop
	
	pop %c
	pop %b
	pop %a
	ret	

start:
	mov %sp FFFFh
	outb 20h 1h
	outb 21h 16h
	out  22h @T1
	
	mov %al 1h
	int 10h
	
	.loop:
		jmp @.loop

vbi:
	call @cls
	call @render
	call @process
	ret

.org 1000h
T1:

решил пойти по накатанному пути и добавил видеоконтроллер, пока только монохромная битовая карта 144x100, но большего и не надо
сабж выводит на экран что отпрыгивает от стен, простое умножение компонента вектора на -1

digitalEugene digitalEugene, (Updated )

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

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

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"
	
wait:
	.loop:
		inb %cl E9h
		cmp %cl 0h
		jnz @.loop
	ret
		
start:
	mov %sp 300h
	.loop:
		mov %al [%b + @data]
		inc %b
		outb E9h %al
		call @wait
		cmp %al Ah
		jnz @.loop
	int 0h

забацал port-mapped io, работает в отдельном потоке
sudo bormand

digitalEugene digitalEugene, (Updated )

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

Сборный / Говнокод #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 )

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

Сборный / Говнокод #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 )

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