程序设计题(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;