Advertisement
Guest User

kolos_assembler

a guest
Dec 12th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. // kolos.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <cstdio>
  6.  
  7. typedef union {
  8. unsigned char BYTE;
  9. struct {
  10. unsigned char a : 1;
  11. unsigned char b : 3;
  12. unsigned char c : 4;
  13. }bits;
  14. }un_X;
  15.  
  16. int main()
  17. {
  18. un_X x;
  19. x.BYTE = 0xec;
  20.  
  21. std::printf("x.BYTE = 0x%X\n", x.BYTE);
  22. std::printf("x.bits.a = 0x%X\n", x.bits.a);
  23. std::printf("x.bits.b = 0x%X\n", x.bits.b);
  24. std::printf("x.bits.c = 0x%X\n", x.bits.c);
  25.  
  26. //x.bits.c = x.bits.b ^ x.bits.c ^ x.bits.a;
  27.  
  28. // w c++
  29. /*
  30. unsigned char a_mask = 0x01;
  31. unsigned char b_mask = 0x0e;
  32. unsigned char c_mask = 0xf0;
  33.  
  34. unsigned char a = (x.BYTE & a_mask);
  35. unsigned char b = ((x.BYTE & b_mask) >> 1);
  36. unsigned char c = ((x.BYTE & c_mask) >> 4);
  37.  
  38. unsigned char result = (b ^ c ^ a);
  39. x.BYTE &= 0x0f;
  40. x.BYTE |= (result << 4);
  41. */
  42.  
  43. _asm {
  44. mov dl, x.BYTE
  45. mov ah, 0x01; a_mask
  46. mov bh, 0x0e; b_mask
  47. mov ch, 0xf0; c_mask
  48.  
  49. mov al, dl; a
  50. and al, ah
  51.  
  52. mov bl, dl; b
  53. and bl, bh
  54. shr bl, 1
  55.  
  56. mov cl, dl; c
  57. and cl, ch
  58. shr cl, 4
  59.  
  60. mov dh, bl; result
  61. xor dh, cl
  62. xor dh, al
  63.  
  64. ; bits.c = (...)
  65. and dl, 0x0f
  66. shl dh, 4
  67. or dl, dh
  68.  
  69. mov x.BYTE, dl
  70. }
  71.  
  72. std::printf("x.BYTE = 0x%X\n", x.BYTE);
  73. std::printf("x.bits.a = 0x%X\n", x.bits.a);
  74. std::printf("x.bits.b = 0x%X\n", x.bits.b);
  75. std::printf("x.bits.c = 0x%X\n", x.bits.c);
  76.  
  77. std::getchar();
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement