汇编的一道简单的题目

来源:百度知道 编辑:UC知道 时间:2024/06/28 17:14:23
有一个100个字节元素的数组,其收首地址为ARRAY·将每个元素减1(不考虑溢出和借位)存于原处。
这个程序段怎么写?
另外请著名每句的作用·
另外再想问下LEA和OFFSET的区别·
最好能有例子说明·

简单定义一个数组:
array db 100 dup(?)
下面是代码:
mov cx, 100 /* 设置循环次数 */
mov si, offset array /* 设置数组初始地址 */
again: /* 循环用的标签 */
mov al, [si] /* 把数组中的字节读入al */
dec al /* 把值减1 */
mov [si], al /* 把新值存入数组 */
inc si /* 转到数组下一个字节 */
dec cx /* 递减循环次数 */
jnz again /* 如果循环次数不为0, 则处理数组下一个元素; 否则退出循环 */
回答你的LEA和OFFSET的两者功能相似,前者是指令,可用的寻值方式多,后者是宏,只能直接用于变量。

data segment
db ........
data ends
code segment
start:mov ax, data;
mov ds, ax;
mov si, 0;
mov cx,100
s:mov al [si]
dec al
mov [si] al
inc si
loop s
...

mov ax 4c00h
int 21h
code ends
end start

写的太麻烦了,不知道能不能直接用dec [si]

offset s 取s的偏移地址
lea ax ... 将其他偏移地址(经过运算)存到ax内,
这两个没啥可比性吧?