第四章算法题

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章