gpt4 book ai didi

assembly - 这些错误是什么意思?汇编语言

转载 作者:行者123 更新时间:2023-12-01 22:30:02 30 4
gpt4 key购买 nike

; This program checks for even or odd parities inside of an array. Displays 1 if even or 0 if odd.

Include Irvine32.inc

TRUE = 1
FALSE = 0

.data

str1 BYTE "Even Parity", 0
str2 BYTE "Odd Parity", 0
str3 BYTE "The block of data under checking is: ", 0

array1 BYTE 1,0,1,0,0,0,1,0,0,1
array2 BYTE 1,0,0,0,0,0,1,0,0,1
; declares two 10-bit arrays

.code
main proc

call Clrscr ; Clears the screen

mov esi, OFFSET array1 ; Pass address

mov ecx, LENGTHOF array1 ; Pass length

call Display ; Display on Console
call Parity_Check
cmp eax,0
je L1 ; if EAX = 0 then odd
mov edx, OFFSET str1
call WriteString ; Write str1
call Crlf
L1:
mov edx, OFFSET str2
Call WriteString ; Write str2
call Crlf
call Crlf ; Check if array2 is even or odd

mov esi, OFFSET array2 ; Pass Address

mov ecx, LENGTHOF array2 ; Pass length

call Display ; Display on console
call Parity_Check
cmp eax, 0
je L2 ; if eax = 0 then odd
mov edx, OFFSET str1
call WriteString ;Write str1
call Crlf
L2:
mov edx, OFFSET str2
call WriteString ; Write str2
call Crlf
call Crlf

invoke ExitProcess,0
main endp


Parity_Check PROC USES eax ecx esi edi ;Returns 1 if even 0 if odd

mov edi, 0 ; array pointer 0

L1:
xor [esi], 0 ; Xor data bits
inc esi ; points to next bit
loop L1 ; continue loop
jpe L2 ; jumps to L2 if even
jpo L3 ; jumps to L3 if odd
L2:
mov eax, TRUE ; copies 1(true) to eax
jmp L4
L3:
mov eax, FALSE ; copies 0(false) to eax
L4:
ret

Parity_Check ENDP
Display PROC USES esi ecx edx ; Displays array elements

mov edx, OFFSET str3
call WriteString ; Writes str3
L1:
mov eax, [esi] ; Store array in eax

call WriteDec ; Write EAX
inc esi ; Point to next item in array
loop L1 ; Continue Traversing
call Crlf
ret

Display endp
end main

我不明白为什么我的 XOR 错误和 masm.target(文件)错误。 XOR 显示“无效指令操作数”,而 masm.targets 错误将我带到该文件。

masm.targets 是文件名,错误代码是第 50 行第 5 列的 MSB3721(它再次将我带到另一个页面,所以我假设我的 MASM 设置有问题?)。对其中任何一个有帮助吗?

最佳答案

array1 BYTE 1,0,1,0,0,0,1,0,0,1
array2 BYTE 1,0,0,0,0,0,1,0,0,1
; declares two 10-bit arrays

您实际上声明了 2 个数组,每个数组有 10 个字节

xor [esi], 0        ; Xor data bits

MASM 会提示不知道这个xor 操作的大小。就这样写吧 xor byte ptr [esi], 0

jpe L2              ; jumps to L2 if even
jpo L3 ; jumps to L3 if odd

这两个与奇偶校验相关的跳转都将基于 ESI 中递增地址的奇偶校验。它们不反射(reflect)您通过测试数组中的字节获得的任何奇偶校验值!这是一个例程:

Parity_Check PROC USES eax ecx esi ;Returns 1 if even, 0 if odd
mov al, 0
L1:
add al, [esi]
inc esi ; points to next byte
loop L1 ; continue loop
test al, 1
jnz L3 ; jumps to L3 if odd
L2:
mov eax, TRUE ; copies 1(true) to eax
jmp L4
L3:
mov eax, FALSE ; copies 0(false) to eax
L4:
ret
Parity_Check ENDP

在您的Display 过程中,您忘记了数组元素的真实大小。
改变这个

mov eax, [esi]                  ; Store array in eax

进入

movzx eax, byte ptr [esi]

关于assembly - 这些错误是什么意思?汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907385/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com