OSDev.org

The Place to Start for Operating System Developers
It is currently Fri Jun 14, 2024 12:37 pm

All times are UTC - 6 hours




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: I ported a 32 bit crc calculating assembly program to 16 bit
PostPosted: Fri May 10, 2024 7:00 am 
Offline

Joined: Fri May 10, 2024 6:49 am
Posts: 2
If any of you need this feel free to use it.


Code:
;;CALCULATES THE CRC-32 OF THE VALUE POINTED AT BY [DS:SI] AND STORES THE
;;32 BIT RESULT IN LOCATION POINTED TO BY [ES:DI] IN LITTLE ENDIAN
;;SPECIFY HOW MANY BYTES TO USE FROM [DS:SI] WITH THE CX REGISTER
CRC_32_CALCULATE:
PUSH SI
PUSH DS
PUSH DI
PUSH ES
PUSH AX
PUSH BX
PUSH CX
PUSH DX


MOV [CS:CRC_32_CALCULATE_EDI+0], DI
MOV DI, ES
MOV [CS:CRC_32_CALCULATE_EDI+2], DI



MOV [CS:CRC_32_CALCULATE_ESI+0], SI
MOV SI, DS
MOV [CS:CRC_32_CALCULATE_ESI+2], SI


MOV AX, 0FFFFH
MOV [CS:ART_32_REG_EAX], AX
MOV [CS:ART_32_REG_EAX+2], AX

MOV BX, CRC_32_POLY_TABLE
XOR DX, DX
CMP CX, 0
JE CRC_32_CALCULATE_END

CRC_32_CALCULATE_CONT:

MOV DL, [CS:ART_32_REG_EAX+0]
MOV SI, [CS:CRC_32_CALCULATE_ESI+2]
MOV DS, SI
MOV SI, [CS:CRC_32_CALCULATE_ESI+0]
XOR DL, [DS:SI]
INC SI
MOV [CS:CRC_32_CALCULATE_ESI+0], SI


MOV DI, CS
MOV ES, DI
MOV DI, ART_32_REG_EAX
CALL ART_32_SHR_8

MOV SI, CS
MOV DS, SI
MOV SI, DX
ADD SI, DX
ADD SI, DX
ADD SI, DX
ADD SI, BX

CALL ART_32_XOR




DEC CX
CMP CX, 0
JNE CRC_32_CALCULATE_CONT





CRC_32_CALCULATE_END:

MOV DI, CS
MOV ES, DI
MOV DI, ART_32_REG_EAX

CALL ART_32_NOT

MOV DI, [CS:CRC_32_CALCULATE_EDI+2]
MOV ES, DI
MOV DI, [CS:CRC_32_CALCULATE_EDI+0]

MOV AL, [ART_32_REG_EAX+0]
MOV [ES:DI], AL
INC DI
MOV AL, [ART_32_REG_EAX+1]
MOV [ES:DI], AL
INC DI
MOV AL, [ART_32_REG_EAX+2]
MOV [ES:DI], AL
INC DI
MOV AL, [ART_32_REG_EAX+3]
MOV [ES:DI], AL
INC DI



POP DX
POP CX
POP BX
POP AX
POP ES
POP DI
POP DS
POP SI
RET



;;;MOVES A 32 BIT VALUE FROM [DS:SI], TO REGISTER POINTED AT BY [ES:DI]

ART_32_NOT:
PUSH DI
PUSH ES
PUSH AX
MOV AL, [ES:DI]
NOT AL
MOV [ES:DI], AL
INC DI
MOV AL, [ES:DI]
NOT AL
MOV [ES:DI], AL
INC DI
MOV AL, [ES:DI]
NOT AL
MOV [ES:DI], AL
INC DI
MOV AL, [ES:DI]
NOT AL
MOV [ES:DI], AL
INC DI
POP AX
POP ES
POP DI
RET

ART_32_MOV:
PUSH SI
PUSH DI
PUSH AX
PUSH CX
XOR CX, CX
ART_32_MOV_CONT:
MOV AL, [DS:SI]
INC SI
MOV [ES:DI], AL
INC DI
INC CX
CMP CX, 4
JB ART_32_MOV_CONT
POP CX
POP AX
POP DI
POP SI
RET

;;XOR'S THE VALUE AT [ES:DI] WITH VALUE FROM [DS:SI], RESULT STORED IN [ES:DI]
ART_32_XOR:
PUSH SI
PUSH DI
PUSH AX
ART_32_XOR_CONT:
MOV AL, [ES:DI]
MOV AH, [DS:SI]
XOR AL, AH
MOV [ES:DI], AL
INC SI
INC DI
MOV AL, [ES:DI]
MOV AH, [DS:SI]
XOR AL, AH
MOV [ES:DI], AL
INC SI
INC DI
MOV AL, [ES:DI]
MOV AH, [DS:SI]
XOR AL, AH
MOV [ES:DI], AL
INC SI
INC DI
MOV AL, [ES:DI]
MOV AH, [DS:SI]
XOR AL, AH
MOV [ES:DI], AL
INC SI
INC DI
POP AX
POP DI
POP SI
RET



;;SHIFTS THE REGISTER POINTED TO BY [ES:DI] TO THE RIGHT BY 8 BITS
ART_32_SHR_8:
PUSH DI
PUSH AX
ADD DI, 3
XOR AH, AH
MOV AL, [ES:DI]
MOV [ES:DI], AH
MOV AH, AL
DEC DI
MOV AL, [ES:DI]
MOV [ES:DI], AH
MOV AH, AL
DEC DI
MOV AL, [ES:DI]
MOV [ES:DI], AH
MOV AH, AL
DEC DI
MOV AL, [ES:DI]
MOV [ES:DI], AH
MOV AH, AL

POP AX
POP DI
RET




CRC_32_CALCULATE_ESI:
DB 0, 0, 0, 0
CRC_32_CALCULATE_EDI:
DB 0, 0, 0, 0

ART_32_REG_EAX:
DB 0, 0, 0, 0

CRC_32_POLY_TABLE:
DD 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
DD 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
DD 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
DD 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
DD 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
DD 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
DD 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
DD 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
DD 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
DD 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
DD 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
DD 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
DD 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
DD 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
DD 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
DD 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
DD 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
DD 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
DD 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
DD 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
DD 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
DD 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
DD 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
DD 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
DD 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
DD 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
DD 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
DD 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
DD 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
DD 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
DD 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
DD 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
DD 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
DD 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
DD 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
DD 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
DD 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
DD 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
DD 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
DD 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
DD 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
DD 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
DD 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
DD 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
DD 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
DD 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
DD 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
DD 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
DD 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
DD 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
DD 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
DD 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
DD 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
DD 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
DD 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
DD 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
DD 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
DD 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
DD 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
DD 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
DD 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
DD 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
DD 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
DD 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D


Last edited by nullplan on Tue Jun 11, 2024 11:24 am, edited 1 time in total.
Missing code tag


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC - 6 hours


Who is online

Users browsing this forum: No registered users and 10 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group