汇编语言对数组寻址几种方式:
# 方式一
mov ax,arr[si]; 直接方式
# 方式二
mov bx,offset arr;
mov ax, arr[bx]; 完成上面一样的方式
程序设计题(30分)
1. 编写一个程序段,将AX寄存器低5位与BX寄存器低11位拼接为一个字,结果送至AX寄存器(10分)。
;1. 编写一个程序段,
;将AX寄存器低5位与BX寄存器低11位拼接为一个字,结果送至AX寄存器(10分)。
assume cs:codes;
codes segment
start:
mov ax,1234h;
mov bx,1234h;
ROR ax,1; ROL ax,1 源操作数 不知道为什么只能为1 ROR 不能实现ROR ax,5 简化代码
ROR ax,1;
ROR ax,1;
ROR ax,1;
ROR ax,1;
and ax,0F800h;
and bx,07FFh;
add ax,bx;
hlt
codes ends
end start;
2.假设寄存器AX保存的是一个有符号数,编写一个程序段实现求AX的绝对值,即(10分)。
;寄存器AX保存的是一个有符号数,编写一个程序段实现求AX的绝对值,
datas segment
x dw 5;
y dw -5;
z dw ?;
datas ends
assume cs:codes,ds:datas
codes segment
start:
mov ax,datas;
mov ds,ax;
mov ax,y;
cmp ax,'0'
jGE let1
mov bx,0000h;
sbb bx,ax; cf=1;
mov ax,bx;
let1:
mov z,ax;
hlt
codes ends
end start;
3.假设数据段中定义了一个名为SEQNUM的字类型数组,该数组的元素个数为100,试编写一个程序段实现将这个数组的100个元素依次初始化为1,2,3,…,100,也就是第一个元素赋值为1,第二个元素赋值为2,依次赋值(10分)。
;寄存器AX保存的是一个有符号数,编写一个程序段实现求AX的绝对值,
datas segment
SEQNUM dw 100 dup(0);
len equ $-SEQNUM;200 子类型为200
datas ends
assume cs:codes,ds:datas
codes segment
start:
mov ax,datas;
mov ds,ax;
mov cx,len;
xor di,di;
xor ax,ax;
inc ax;
next:
mov SEQNUM[di] ,ax;
inc di
inc di
inc ax;
loop next
hlt
codes ends
end start;