汇编小题

dikong 2008-10-20 11:57:17
大家帮忙编个小程序,用汇编语言!
1.编一个程序,统计一个8位二进制数中的为“1”的位的个数。
2.利用变址寄存器,编一个程序,把1000H单元开始的100个数传送自1070H开始的存储区中去。

由于刚学汇编语言,好多不懂,请大家多帮帮忙!
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2008-10-22
  • 打赏
  • 举报
回复
第一题是俺老师讲课时的例题,一点都没变,第二题好像也是一个成品题。
cnzdgs 2008-10-21
  • 打赏
  • 举报
回复
第2问最好是用串操作实现,代码在前面已经给了。如果用变址效率很低,代码如下:
xor si,si ; si初始化为0
lp:
mov al,[si+1000H] ; 取1000H + si处的数据
mov [si+1070H],al ; 将数据存入1070H + si处
inc si ; si加1
cmp si,100 ; si与100比较
jc lp ; 小于100则循环
dikong 2008-10-21
  • 打赏
  • 举报
回复
强!!!!!!!!
BAYNPU 2008-10-20
  • 打赏
  • 举报
回复
1.编一个程序,统计一个8位二进制数中的为“1”的位的个数。
...
mov si,offset block
mov di,offset dplus
mov bx,offset dminus
mov ax,ds
mov es,ax
mov cx,count
cld
aa lodsb
test al,80h
jnz minus
stosb
jmp again
minus:xchg bx,di
stosb
xchg bx,di
again:dec cx
jnz aa
...
2.利用变址寄存器,编一个程序,把1000H单元开始的100个数传送自1070H开始的存储区中去。
code segment
assume cs:code
start: mov si,1000h
mov di,1070h
mov cx,100
cld
again:movsb
dec cx
jnz again
code ends
end start
end
ak9892 2008-10-20
  • 打赏
  • 举报
回复
AX为一个8位二进制数
REPEAT:
TEST AX,0FFFFH;让AX和全1与
JZ EXIT;如果是全0就到EXIT
JNS SHIFT;符号标志位为0时(SF=0)转移到SHIFT
JNC CX;如果AX中有出现1计数器加1
SHIFT
SHL AX,1;让AX左移1位
JMP REPEAT;无条件转移到REPEAT
EXIT:
MOV COUNT,CX;把CX置入COUNT
RET;过程返回
我只会输出1的个数,用变址寄存器存入存储器就不会了,我也是这学期刚学,互相提高
cnzdgs 2008-10-20
  • 打赏
  • 举报
回复
1、用循环移位与带进位加法组合实现:
mov al, Value ; 要统计的数放入al
xor cx,cx ; 用cx储存结果,初始化为0
lp:
test al,al ; 测试al
jz finish ; 如果al为0则结束
shr al,1 ; 右移一位
jnc lp ; CF标志为0,即改位不是1,则继续循环
adc cl,ch ; 结果加1,(ch是0)
jmp lp ; 继续循环
finish:

2、最好是用串操作实现:
push ds
pop es ; 让es与ds相同
mov cx,100 ; 要复制的个数
mov si,1000H ; 源地址
mov di,1070H ; 目的地址
cld ; 方向
rep movsb ; 复制
ak9892 2008-10-20
  • 打赏
  • 举报
回复
上课时老师讲过这个例题,嘿嘿,就是没听懂。我下去问问高人,会了就给你发过去!!!!!!!!!!!

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧