汇编四(习题)

浪子不回头ぞ 提交于 2019-12-05 10:05:22

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

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!