. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验7程序请_指正  [待解决] 回复[ 6次 ]   点击[ 496次 ]  
fxl
[帖 主]   [ 发表时间:2010-02-06 21:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-27 17:13
这是我写的程序,结果编译的时候有五个严重错误,但是我就是没觉得错,请大家看看
assume  cs:codesg 
data    segment 
db '1975','1976','1977','1978','1979','1980','1981','1982','1983' 
db '1984','1985','1986','191111111111111187','1988','1989','1990','1991','1992' 
db '1993','1994','1995' 
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,17514 
dd  345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5636,8226 
dw 11542,14430,15257,17800 
data ends 
table segment 
db 21 dup ('year summ ne ?? ') 
table ends 
stack segment
db 16 dup(0)
stack ends
codesg segment
start:mov ax,data
      mov ds,ax
      mov ax,table
      mov es,ax
      mov ax,stack
      mov ss,ax
      mov sp,10h
      mov cx,21
      mov bx,0
   s0:push cx
      mov cx,4
      mov si, 0
      mov di,0
   s1:mov byte ptr es:[bx+si],ds:[di];31行错误
      mov byte ptr es:[bx+si+5],ds:[di+53h];错误
     
      inc si
      inc di
      loop s1
      add bx,10h
      pop cx
      loop s0
      mov cx,21
      mov bx,0
   s2:push cx;错误
      mov cx,2
      mov si,0
      mov di,0
   s3:mov byte ptr es:[bx+0ah+si],[di+0a8h];错误
      inc si
      inc di
      loop s3
      add bx,10h
      pop cx
      loop s2
      mov cx,21
      mov bx,0
   s4:mov ax,es:[bx+5h];错误
      mov dx,es:[bx+7h]
      div word ptr es:[bx+0ah]
      mov es:[bx+0dh],ax
      add bx,10h
      loop s4
      mov ax,4c00h
      int 21h
codesg ends
end start
regex
[第1楼]   [ 回复时间:2010-02-07 01:42 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
给我感觉有2:
1.
s1:mov byte ptr es:[bx+si],ds:[di];31行错误 
      mov byte ptr es:[bx+si+5],ds:[di+53h];错误
-------------------------------------------------
si,di指令用法不清!, si应为源地址, di应为目的地址
另外, mov不支持两个内存单元直接传输数据吧, 应该用个寄存器中转一下。

2,
逻辑上有些混乱。 呵呵
strawer
[第2楼]   [ 回复时间:2010-02-07 16:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-02-03 13:33
mov byte ptr es:[bx+si],ds:[di]  同意楼上的,用AX或AL 中转一下
再一个我感觉不要用太多循环,容易迷糊,刚开始我也是用几个循环,搞了一上午没做出来。
fxl
[第3楼]   [ 回复时间:2010-02-07 21:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-27 17:13
非常感谢你们的指点
fxl
[第4楼]   [ 回复时间:2010-02-07 21:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-27 17:13
回复:[第1楼]
------------------
si和di,源地址和目的地址可否用书上148页第8和9行这样解释,我们用ds:di 指向要复制的源始字符串,而ds:di指向复制 的目的空间
regex
[第5楼]   [ 回复时间:2010-02-09 01:04 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
回复:[第1楼]
------------------
si和di,源地址和目的地址可否用书上148页第8和9行这样解释,我们用ds:di 指向要复制的源始字符串,而ds:di指向复制 的目的空间
------------------
回复:
呵呵, 看来你对si,di还是没搞明白
我建议你先不要循环, 先搞定年, 然后搞定销售额, 再搞定人数, 最后, 在做除法。 吧步骤先简化, 无误后, 在循环。
ddup
[第6楼]   [ 回复时间:2010-03-30 12:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-27 09:11
调试实验7执行到后面时出现提示:divide overflow.program terminated normally.是什么意思?为什么会这样?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved