我想将一个 8 位二进制数的反转和该反转的 1 的补码作为单个输出
I want to get the reversal of a 8-bit binary number and 1's complement of that reversal as a single output
我写了这段代码,但我只得到反转的字符串作为输出。我也想要反转字符串的 1 补码作为输出。
我知道我怎样才能得到这个。当我编辑我的代码并准备好接受 1 的反转字符串的补码时,我的反转字符串不复存在了!
测试用例:
input: 11010110
输出(即需要):
Reversed string: 01101011
1's Complement of it: 10010100
我的代码:
;REVERSING 8-BIT BINARY NO.
.MODEL
.STACK 100H
.DATA
STR DB 'Enter the binary number (max 8-bit) : $'
STR2 DB 0DH,0AH,'REVERSED STRING : $'
STR3 DB 'THE 1S COMPLEMENT OF IT: $'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
LEA DX, STR ; display STR
MOV AH, 9
INT 21H
XOR BL, BL ; CLEAR BL
MOV CX, 8 ; loop for 8 times
MOV AH, 1
INPUT:
INT 21H
CMP AL, 0DH ; compare digit with carriage return (ENTER)
JZ END ; jump to END, if carriage return (JUMP IF ZERO)
AND AL, 01H ; convert ascii to decimal code
SHL BL, 1 ; rotate BX to left by 1 bit
OR BL, AL ; set the LSB of BX with input
LOOP INPUT ; jump to INPUT
END:
MOV AL, BL ; copy BL into AL
MOV CX, 8 ; loop for 8 times
LP: ; loop
SHL AL, 1 ; shift AL to left by 1 bit
RCR BL, 1 ; rotate BL right through carry
LOOP LP ; jump to LP
LEA DX, STR2 ; load and display STR2
MOV AH, 9
INT 21H
MOV CX, 8
MOV AH, 2 ; output function
OUTPUT:
SHL BL, 1 ; shift left BL by 1 bit
JNC ZERO ; jump to label ZERO if CF=0
MOV DL, 31H ; set DL=1. DL=0 for 1's compelement.
JMP DISPLAY ; jump to DISPLAY
ZERO:
MOV DL, 30H ; set DL=0. DL=1 for 1's complement.
DISPLAY:
INT 21H ; display digit
LOOP OUTPUT ; output
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
您可以在第 52 行使用 ROL
而不是 SHL
来将反转后的值保存在 BL
寄存器中。现在您可以稍后重用它来输出 1 的补码值,如下所示:
MOV CX, 8 ; For looping 8 times
MOV AH, 2
_OUTPUT_INVERSE:
ROL BL, 1 ; Rotate left by 1 bit
JC _I_ZERO ; jump to label ZERO if CF=1
MOV DL, 31H ; set DL=1. DL=0 for 1's compelement.
JMP _I_DISPLAY ; jump to DISPLAY
_I_ZERO:
MOV DL, 30H ; set DL=0. DL=1 for 1's complement.
_I_DISPLAY:
INT 21H
LOOP _OUTPUT_INVERSE ; output the inverse
之所以有效,是因为在打印反向值后,BL
寄存器包含
6B
(即 01101011
)。因此,只需将左移(或旋转)值一次
在每个循环中将一个一个地使用反向值,它像以前一样打印
反向值。
完整代码:(使用您的风格)
;REVERSING 8-BIT BINARY NO.
.MODEL
.STACK 100H
.DATA
STR DB 'Enter the binary number (max 8-bit) : $'
STR2 DB 0DH,0AH,'REVERSED STRING : $'
STR3 DB 0DH,0AH,'THE 1S COMPLEMENT OF IT: $'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
LEA DX, STR ; display STR
MOV AH, 9
INT 21H
XOR BL, BL ; CLEAR BL
MOV CX, 8 ; loop for 8 times
MOV AH, 1
INPUT:
INT 21H
CMP AL, 0DH ; compare digit with carriage return (ENTER)
JZ END ; jump to END, if carriage return (JUMP IF ZERO)
AND AL, 01H ; convert ascii to decimal code
SHL BL, 1 ; rotate BX to left by 1 bit
OR BL, AL ; set the LSB of BX with input
LOOP INPUT ; loop INPUT
END:
MOV AL, BL ; copy BL into AL
MOV CX, 8 ; loop for 8 times
LP: ; loop
SHL AL, 1 ; shift AL to left by 1 bit
RCR BL, 1 ; rotate BL right through carry
LOOP LP ; jump to LP
LEA DX, STR2 ; load and display STR2
MOV AH, 9
INT 21H
MOV CX, 8
MOV AH, 2 ; output function
OUTPUT_REVERSE:
ROL BL, 1 ; rotate left BL by 1 bit
JNC ZERO ; jump to label ZERO if CF=0
MOV DL, 31H ; set DL=1. DL=0 for reversing the value.
JMP DISPLAY ; jump to DISPLAY
ZERO:
MOV DL, 30H ; set DL=0. DL=1 for reversing the value.
DISPLAY:
INT 21H ; display digit
LOOP OUTPUT_REVERSE ; output reverse value
LEA DX, STR3 ; load and display STR3
MOV AH, 9
INT 21H
MOV CX, 8
MOV AH, 2 ; output function
OUTPUT_INVERSE:
ROL BL, 1 ; rotate left by 1 bit
JC I_ZERO ; jump to label ZERO if CF=1
MOV DL, 31H ; set DL=1. DL=0 for 1's compelement.
JMP I_DISPLAY ; jump to DISPLAY
I_ZERO:
MOV DL, 30H ; set DL=0. DL=1 for 1's complement.
I_DISPLAY:
INT 21H
LOOP OUTPUT_INVERSE ; output the inverse value
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
输出:
Enter the binary number (max 8-bit) : 11010110
REVERSED STRING : 01101011
THE 1S COMPLEMENT OF IT: 10010100
顺便说一句,您不需要第 26 和 27 行,因为循环 运行 只有 8 次。
我写了这段代码,但我只得到反转的字符串作为输出。我也想要反转字符串的 1 补码作为输出。 我知道我怎样才能得到这个。当我编辑我的代码并准备好接受 1 的反转字符串的补码时,我的反转字符串不复存在了!
测试用例:
input: 11010110
输出(即需要):
Reversed string: 01101011 1's Complement of it: 10010100
我的代码:
;REVERSING 8-BIT BINARY NO.
.MODEL
.STACK 100H
.DATA
STR DB 'Enter the binary number (max 8-bit) : $'
STR2 DB 0DH,0AH,'REVERSED STRING : $'
STR3 DB 'THE 1S COMPLEMENT OF IT: $'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
LEA DX, STR ; display STR
MOV AH, 9
INT 21H
XOR BL, BL ; CLEAR BL
MOV CX, 8 ; loop for 8 times
MOV AH, 1
INPUT:
INT 21H
CMP AL, 0DH ; compare digit with carriage return (ENTER)
JZ END ; jump to END, if carriage return (JUMP IF ZERO)
AND AL, 01H ; convert ascii to decimal code
SHL BL, 1 ; rotate BX to left by 1 bit
OR BL, AL ; set the LSB of BX with input
LOOP INPUT ; jump to INPUT
END:
MOV AL, BL ; copy BL into AL
MOV CX, 8 ; loop for 8 times
LP: ; loop
SHL AL, 1 ; shift AL to left by 1 bit
RCR BL, 1 ; rotate BL right through carry
LOOP LP ; jump to LP
LEA DX, STR2 ; load and display STR2
MOV AH, 9
INT 21H
MOV CX, 8
MOV AH, 2 ; output function
OUTPUT:
SHL BL, 1 ; shift left BL by 1 bit
JNC ZERO ; jump to label ZERO if CF=0
MOV DL, 31H ; set DL=1. DL=0 for 1's compelement.
JMP DISPLAY ; jump to DISPLAY
ZERO:
MOV DL, 30H ; set DL=0. DL=1 for 1's complement.
DISPLAY:
INT 21H ; display digit
LOOP OUTPUT ; output
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
您可以在第 52 行使用 ROL
而不是 SHL
来将反转后的值保存在 BL
寄存器中。现在您可以稍后重用它来输出 1 的补码值,如下所示:
MOV CX, 8 ; For looping 8 times
MOV AH, 2
_OUTPUT_INVERSE:
ROL BL, 1 ; Rotate left by 1 bit
JC _I_ZERO ; jump to label ZERO if CF=1
MOV DL, 31H ; set DL=1. DL=0 for 1's compelement.
JMP _I_DISPLAY ; jump to DISPLAY
_I_ZERO:
MOV DL, 30H ; set DL=0. DL=1 for 1's complement.
_I_DISPLAY:
INT 21H
LOOP _OUTPUT_INVERSE ; output the inverse
之所以有效,是因为在打印反向值后,BL
寄存器包含
6B
(即 01101011
)。因此,只需将左移(或旋转)值一次
在每个循环中将一个一个地使用反向值,它像以前一样打印
反向值。
完整代码:(使用您的风格)
;REVERSING 8-BIT BINARY NO.
.MODEL
.STACK 100H
.DATA
STR DB 'Enter the binary number (max 8-bit) : $'
STR2 DB 0DH,0AH,'REVERSED STRING : $'
STR3 DB 0DH,0AH,'THE 1S COMPLEMENT OF IT: $'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
LEA DX, STR ; display STR
MOV AH, 9
INT 21H
XOR BL, BL ; CLEAR BL
MOV CX, 8 ; loop for 8 times
MOV AH, 1
INPUT:
INT 21H
CMP AL, 0DH ; compare digit with carriage return (ENTER)
JZ END ; jump to END, if carriage return (JUMP IF ZERO)
AND AL, 01H ; convert ascii to decimal code
SHL BL, 1 ; rotate BX to left by 1 bit
OR BL, AL ; set the LSB of BX with input
LOOP INPUT ; loop INPUT
END:
MOV AL, BL ; copy BL into AL
MOV CX, 8 ; loop for 8 times
LP: ; loop
SHL AL, 1 ; shift AL to left by 1 bit
RCR BL, 1 ; rotate BL right through carry
LOOP LP ; jump to LP
LEA DX, STR2 ; load and display STR2
MOV AH, 9
INT 21H
MOV CX, 8
MOV AH, 2 ; output function
OUTPUT_REVERSE:
ROL BL, 1 ; rotate left BL by 1 bit
JNC ZERO ; jump to label ZERO if CF=0
MOV DL, 31H ; set DL=1. DL=0 for reversing the value.
JMP DISPLAY ; jump to DISPLAY
ZERO:
MOV DL, 30H ; set DL=0. DL=1 for reversing the value.
DISPLAY:
INT 21H ; display digit
LOOP OUTPUT_REVERSE ; output reverse value
LEA DX, STR3 ; load and display STR3
MOV AH, 9
INT 21H
MOV CX, 8
MOV AH, 2 ; output function
OUTPUT_INVERSE:
ROL BL, 1 ; rotate left by 1 bit
JC I_ZERO ; jump to label ZERO if CF=1
MOV DL, 31H ; set DL=1. DL=0 for 1's compelement.
JMP I_DISPLAY ; jump to DISPLAY
I_ZERO:
MOV DL, 30H ; set DL=0. DL=1 for 1's complement.
I_DISPLAY:
INT 21H
LOOP OUTPUT_INVERSE ; output the inverse value
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
输出:
Enter the binary number (max 8-bit) : 11010110
REVERSED STRING : 01101011
THE 1S COMPLEMENT OF IT: 10010100
顺便说一句,您不需要第 26 和 27 行,因为循环 运行 只有 8 次。