第四章算法題

1.有一名爲three的雙字變量,編寫一組MOV指令來交換該變量的高位字和低位字。

mov ax, word ptr three
mov bx, word ptr three + type word
mov word ptr three + type word, ax
mov word ptr three, bx

2.用不超過3條的XCHG指令對4個8位寄存器的值進行重排序,將其順序從A、B、C、D調整爲B、C、D、A。

mov ah, 'A'
mov al, 'B'
mov bh, 'C'
mov bl, 'D'
xchg ah, al
xchg al, bh
xchg bh, bl

3、被傳輸的信息通常包含有一個奇偶位,其值與數據字節綁定在一起,使得1的位數爲偶數。設AL寄存器中信息字節的值爲0111 0101,如何用一條算術運算指令和奇偶標誌位判斷該信息字節是偶校驗還是奇校驗?

mov al, 01110101
add al, 0

4、編寫代碼,用字節操作數實現兩個負整數相加,並使溢出標誌位置1。

mov al, -127
add al, -1

5、編寫連續的兩條指令,用加法使零標誌位和進位標誌位同時置1。

mov al, 0FFh
add al, 1

6、編寫連續的兩條指令,用減法使進位標誌位置1。

mov al, 1
sub al, 2

7、用匯編語言實現算術表達式:EAX=-val2+7-val3+val1。

mov ax, val2
neg ax
add ax, 7
add ax, val1
sub ax, val3

8、編寫循環代碼,在一個雙字數組中進行迭代。用帶比例因子的變址尋址,計算該數組元素的總和。

ExitProcess proto
.data
array dword 00001111h, 00002222h, 00003333h, 00004444h

.code
main proc
	mov eax, 0
    mov esi, offset array
	mov ecx, lengthof array
L1:
	add eax, [esi]
	add esi, type dword
	loop L1
	call ExitProcess
main endp
end

12、數組反向。

ExitProcess proto
ptw typedef ptr dword

.data
arr dword 1, 2, 3, 4, 5
p1 ptw arr
p2 ptw arr + sizeof arr - type arr

.code
main proc
	mov rcx, lengthof arr / 2 + 1
L1:
	mov rsi, p1
	mov rdi, p2
	mov eax, [rsi]
	xchg eax, [rdi]
	mov [rsi], eax
	add p1, type arr
	sub p2, type arr
	loop L1
	call ExitProcess
main endp
end

13、數組元素右移。

ExitProcess proto
ptw typedef ptr dword

.data
arr dword 10, 20, 30, 40, 50
p ptw arr + sizeof arr - type arr

.code
main proc
	mov rcx, lengthof arr - 2
	mov rsi, p
	mov eax, arr
	xchg eax, arr + sizeof arr - type arr
	mov arr, eax
L1:	
	mov rdi, rsi
	sub rdi, type arr
	mov eax, [rsi]
	xchg eax, [rdi]
	mov [rsi], eax
	mov rsi, rdi
	loop L1
	call ExitProcess
main endp
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章