那就算了吧啊 发表于 2011-9-18 13:32:38

给下1+2+3+4.。。+100 用汇编怎么写吧

我试试着做个就是1+2+3+。。。+100=?请各位大大给个写的,让我 看下,我写的怎么都感觉不太对的样子。还有就是怎么查看结果。就是加到100时等于多少,让我一下查到,就知道写错了没有。

cqy55555 发表于 2011-9-18 13:53:27

把你写的拿出来看看

ytrfamli 发表于 2011-9-18 13:59:50

>>就是怎么查看结果。让我一下查到,就知道写错了没有。
debug有一个g指令可以让程序执行到你想要的地方停下来
先用u(直接回车),可以查看程序中指令的ip,
然後用g <你想停下来的指令的ip>

假设u的结果如下 (只是举例,cs,ip数值以实际为准)
0bbf:0010   
0bbf:0012   mov ax,4c00H             <---计算完毕,准备返回DOS了

输入g 12 (回车)
程序就直接执行到ip为0012处的地方停下

>>我写的怎么都感觉不太对的样子
1加到100结果以16进制表示为13BAh,10进制是5050.

1加到100需要什麽? 新结果=旧结果+变数 这样的指令循环100次
(1=0+1, 3=1+2, 6=3+3....5050=4950+100)
提示:可以用cx寄存器存循环次数,每次循环把数字加到ax寄存器.

☆零℡壹☆ 发表于 2011-9-18 15:22:25

assume cs:codecs,ds:num

num segment
dw 0
num ends

codecs segment

start:
mov ax,num
mov ds,ax

mov bx,1
mov cx,100

s:
add num:0,bx
inc bx
loop s

mov ax,4c00H
int 21H

codecs ends
end start

☆零℡壹☆ 发表于 2011-9-18 15:23:04

(num:0) = 5050

那就算了吧啊 发表于 2011-9-19 14:04:46

看不明白啊,还有那么多东西,不过我想这几天就能看的明白,谢谢上面的大大。

lsgo 发表于 2011-9-19 20:23:02

本帖最后由 lsgo 于 2011-9-19 20:25 编辑

assume cs:codesg

codesg segment

      mov ax,0       // AX = 0
      mov bx,1       // BX = 1
      mov cx,100    // CX = 100 《循环次数为100 如果 AX=1 BX=2 则循环次数为99》

      s:add ax,bx       //AX = AX + bx   也就是 AX = 0 + 1
      inc bx          //BX = BX + 1            BX = 1 + 1
      loop s          //跳转至 ADD AX,BX 处进行循环 循环次数为 CX 中的值

      mov ax,4c00h    //当 CX = 0 时跳转至此 AX=13BA 十进制为 5050 也就是1+2+3..+100的和
      int 21h

codesg ends

end
//表达能力有限 带来的不便请见谅

那就算了吧啊 发表于 2011-9-20 13:48:01

谢谢。我会好好看的。

killkk 发表于 2011-9-20 17:11:36

{:5_100:} 自己动手写一下。。。

cenjie88 发表于 2011-9-29 09:24:04

回头去试试。

关键是感觉 发表于 2011-9-29 10:09:25

assume cs:code
code segment
start: mov ax,0
       mov bx,1
    mov cx,100
s:    add ax,bx
      inc bx
   loop s
   
   mov ax,4c00h
   int 21h
code ends
end start

seuer126 发表于 2011-9-29 11:01:52

如果这个程序写完,用debug来调试的话, 要按--t 100次啊 那不累死了啊。有个软件就直接得出结果的。 如果非要加的话,就改成10次吧,这样好点吧。反正道理都是一样的!
页: [1]
查看完整版本: 给下1+2+3+4.。。+100 用汇编怎么写吧