汇编编程实践:字符串处理与逻辑运算

63、编写一个程序,为几个字符串字面量(引号之间的字符)定义符号名。在变量定义中使用每个符号名。

示例代码如下:

pressKey EQU <"Press any key to continue... ",0>

然后在 .data 段用 prompt BYTE pressKey 来使用该符号名。可根据此方法为多个字符串字面量定义符号名并在变量定义中使用。

64、编写一个程序,使用循环和间接寻址将字符串从源复制到目标,并在过程中反转字符顺序。使用以下变量:source BYTE “This is the source string”,0 target BYTE SIZEOF source DUP(‘#’)

以下是满足需求的汇编程序示例:

; ReverseCopyStr.asm
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

.data
source BYTE "This is the source string",0
target BYTE SIZEOF source DUP('#')

.code
main PROC
    mov esi,OFFSET source ; 指向源字符串起始位置
    mov edi,OFFSET target + SIZEOF source - 1 ; 指向目标字符串末尾位置
    mov al,0 ; 初始化空字符

L1:
    cmp [esi],al ; 检查是否到达源字符串末尾
    je EndLoop ; 如果到达末尾,结束循环
    mov bl,[esi] ; 获取源字符串中的字符
    mov [edi],bl ; 将字符存储到目标字符串中
    dec edi ; 目标字符串指针前移
    inc esi ; 源字符串指针后移
    jmp L1 ; 继续循环

EndLoop:
    mov [edi],al ; 在目标字符串末尾添加空字符
    invoke ExitProcess,0
main ENDP

END main

此程序借助循环和间接寻址,把源字符串复制到目标字符串,同时反转字符顺序。

65、执行指令“mov bx,0FFFFh;and bx,6Bh;mov bx,91BAh;and bx,92h;mov bx,0649Bh;or bx,3Ah”后,BX 的值是多少?

计算过程

按照指令依次计算:

  1. 先将 0FFFFh 与 6Bh 进行与运算,结果存于 BX。
    在二进制中,
    - 0FFFFh = 1111 1111 1111 1111B
    - 6Bh = 0000 0000 0110 1011B

进行与运算(与运算规则:对应位都为 1 结果才为 1,否则为 0),得到
- 0000 0000 0110 1011B = 6Bh

  1. 再将 91BAh 与 92h 进行与运算,结果存于 BX。
    - 91BAh = 1001 0001 1011 1010B
    - 92h = 0000 0000 1001 0010B

进行与运算得到
- 0000 0000 1001 0010B = 92h

  1. 最后将 0649Bh 与 3Ah 进行或运算,得到最终 BX 的值。
    - 0649Bh = 0000 0110 0100 1011B
    - 3Ah = 0000 0000 0011 1010B

进行或运算(或运算规则:对应位只要有一个为 1 结果就为 1,都为 0 结果才为 0),得到
- 0000 0110 0111 1011B = 067Bh

所以最终 BX 的值是 067Bh。

66、执行指令“mov bx,029D6h”和“xor bx,8181h”后,BX的值是多少?

将十六进制数 029D6h 8181h 进行异或运算:

029D6h ^ 8181h = 8357h

所以 BX 的值为 8357h

67、执行指令“mov ebx,0AFAF649Bh”和“or ebx,3A219604h”后,EBX的值是多少?

将十六进制数 0AFAF649Bh 3A219604h 进行按位或运算,结果为 0BFAFF69Fh 。所以 EBX 的值是 0BFAFF69Fh

68、执行指令“mov rbx,0AFAF649Bh”和“xor rbx,0FFFFFFFFh”后,RBX的值是多少?

对十六进制数 0AFAF649Bh 0FFFFFFFFh 进行异或运算,结果为 50509B64h ,所以 RBX 的值是 50509B64h

69、指令序列 mov al, 01101111b; and al, 00101101b 中,给出执行完指令后 AL 的结果值,以二进制表示。

00101101b

70、哪个条件跳转指令根据 ECX 的内容执行分支?

在 32 位模式下, LOOPZ LOOPE )指令在 零标志位被设置 ECX 大于零 时重复执行; LOOPNZ LOOPNE )指令在 零标志位被清除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值