Assembly 程序集x8086交换数组值
我有一个问题要写一个能得到8个字符/数字的代码 它将在它们之间每隔2个字节交换一次 例如: 输入451ABD45 ARR=| 34 | 35 | 31 | 41 | 42 | 44 | 34 | 35 纽瓦尔=| 35 | 34 | 41 | 31 | 44 | 42 | 35 | 34 输出54A1DB54 我的代码:Assembly 程序集x8086交换数组值,assembly,tasm,emu8086,Assembly,Tasm,Emu8086,我有一个问题要写一个能得到8个字符/数字的代码 它将在它们之间每隔2个字节交换一次 例如: 输入451ABD45 ARR=| 34 | 35 | 31 | 41 | 42 | 44 | 34 | 35 纽瓦尔=| 35 | 34 | 41 | 31 | 44 | 42 | 35 | 34 输出54A1DB54 我的代码: STA SEGMENT STACK DB 100H DUP (0) STA ENDS DATA SEGMENT MSG DB 'Please Enter 8
STA SEGMENT STACK
DB 100H DUP (0)
STA ENDS
DATA SEGMENT
MSG DB 'Please Enter 8 Chars : $'
DIM DW 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STA
MAIN:
MOV AX, DATA
MOV DS, AX
LEA DX, MSG
MOV AH, 9H
INT 21H
MOV DL, 10
MOV AH, 02H
INT 21H
MOV DL, 13
MOV CX, 8
MOV BX, 0
MOV DX, 0
INPUT:
MOV AH, 1H
INT 21H
MOV AH, 0
MOV DIM[BX], AX
INC BX
LOOP INPUT
MOV CX, 4
MOV BX, 0
EXCHANGE:
MOV DX, DIM[BX] ;0
INC BX ;1
MOV AX, DIM[BX] ;1
DEC BX ;0
MOV DIM[BX], AX ;0
ADD BX, 1 ;1
MOV DIM[BX], DX ;1
INC BX
LOOP EXCHANGE
MOV DL, 10
MOV AH, 02H
INT 21H
MOV DL, 13
MOV CX, 8
MOV BX, 0
MOV DX, 0
PRINT:
MOV DX, DIM[BX]
INC BX
MOV AH, 2H
INT 21H
LOOP PRINT
MOV AX, 4C00H
INT 21H
CODE ENDS
END MAIN
My_输入451ABD45
ARR=| 34 | 35 | 31 | 41 | 42 | 44 | 34 | 35
MY|u NewARR=|35 | 34 | 41 | 35 | 44 | 41 | 35 | 44
My_输出54A5DA5D
我的代码有什么问题,谢谢您的帮助您正在加载和存储单词(16位值),而您的字符每个只有一个字节 例如,在第一次迭代之前,您有:
'4','5','1','A','B','D','4','5'
'5','4','1','A','B','D','4','5'
| |
\ /
swapped
在第一次迭代之后,您应该有:
'4','5','1','A','B','D','4','5'
'5','4','1','A','B','D','4','5'
| |
\ /
swapped
但你最终要做的是:
'5','1','1','A','B','D','4','5'
| |
\ /
AX is stored
'5','4','5','A','B','D','4','5'
| |
\ /
DX is stored
等等,这条线的其余部分
固定且稍微简化的交换循环可能如下所示:
EXCHANGE:
MOV DH,BYTE PTR [BX + DIM] ; First character in high byte of DX
MOV DL,BYTE PTR [BX + DIM+1] ; Second character in low byte of DX
MOV [BX + DIM],DX ; DX contains the byte-swapped pair
ADD BX,2 ; Move to next pair of characters
LOOP EXCHANGE
它不起作用。它给我一个错误操作数类型与MOV DH、[BX+DIM]MOV DL、[BX+DIM+1]不匹配好的,这是TASM的问题。尝试使用
BYTE PTR
(例如MOV DH,BYTE PTR[BX+DIM]
)非常好,非常感谢=D(BYTE PTR是什么?)它是一个大小说明符,告诉TASM,即使DIM
声明为一个单词数组,您也希望访问单个字节。