鱼C论坛

 找回密码
 立即注册
查看: 2694|回复: 10

真的实验7

[复制链接]
发表于 2017-8-7 08:59:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ds:data,es:table

data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995';年份地址0~53h

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;收入地址54h~0a7h

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800;雇员地址0a8h~0d1h
data ends

table segment
db 21 dup ('year summ ne ?? ')
table ends

code segment
    start :      mov ax,data
                   mov ds,ax
                   mov ax,table
                   mov es,ax
                   mov bx,0
                   mov si,0
                   mov di,0
                   mov cx,21

                  s:mov al,[bx]
                    mov es:[di],al
                    mov al,[bx+1]
                    mov es:[di+1],al
                    mov al,[bx+2]
                    mov es:[di+2],al
                    mov al,[bx+3]
                    mov es:[di+3],al;写年份

                    mov ax,[bx+54h]
                        mov dx,[bx+56h]
                        mov es :[di+5],ax
                        mov es :[di+7],dx ;写收入       
               
                        mov ax,[bx+0a8h]
                        mov es:[di+0ah],ax ;写雇员

                        mov ax,[bx+54h]
                        mov dx,[bx+56h]
                        div word ptr ds:[0a8h+si]
                        mov  es :[0dh+di],ax ;写人均收入
       
                        add di,16
                        add si,2
                        add bx,4
                        loop s

                        mov ax,4c00h
                        int 21h

                        code ends
                        end start
                                    怎么修改正确
            
Y9XQO2C{QZ99YPO)Q_[UY}D.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-8-7 09:08:19 | 显示全部楼层
鱼油帮帮忙  我想把这点过了好快点往下学,否则心里不安啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 09:38:53 | 显示全部楼层
把  十六进制换成十进制就是这样了
Y9XQO2C{QZ99YPO)Q_[UY}D.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 09:41:49 | 显示全部楼层
不是 上传错图片了  ,错误为0,警告为1   
应该是进制表达的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 10:03:41 | 显示全部楼层
本帖最后由 erh 于 2017-8-7 10:05 编辑

question1..jpg

编译链接没有问题。是不是编译器版本的问题?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 10:09:49 | 显示全部楼层
erh 发表于 2017-8-7 10:03
编译链接没有问题。是不是编译器版本的问题?

我把idata  换成了十进制数就可以了,但是debug   的时候只显示年份,别的没有 ,朋友能调试一下吧结果截给我么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 10:11:22 | 显示全部楼层
酸辣小白菜 发表于 2017-8-7 10:09
我把idata  换成了十进制数就可以了,但是debug   的时候只显示年份,别的没有 ,朋友能调试一下吧结果截 ...

2545620606   这是我的Q  方便的话加一下,以后有不懂的可以多请教你,这里有限制,图片只能上传两张
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 15:30:15 | 显示全部楼层
酸辣小白菜 发表于 2017-8-7 10:11
2545620606   这是我的Q  方便的话加一下,以后有不懂的可以多请教你,这里有限制,图片只能上传两张

我估计也是比你多学了几天的小白
请教谈不上,共同交流吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 15:32:34 | 显示全部楼层
酸辣小白菜 发表于 2017-8-7 10:11
2545620606   这是我的Q  方便的话加一下,以后有不懂的可以多请教你,这里有限制,图片只能上传两张


你注意了没有,你的年份是字符型的。其他的是整数。要把数字转换成字符才能在屏幕上显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 15:44:01 | 显示全部楼层
erh 发表于 2017-8-7 15:32
你注意了没有,你的年份是字符型的。其他的是整数。要把数字转换成字符才能在屏幕上显示

嗯嗯 年份我显示出来了但不是从偏移地址0~53h     显示出来的   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 17:02:41 | 显示全部楼层
这是原来我根据学的视频写的,你参考一下吧。因为明天我要外出10天,不能回复了

  1. assume cs:code,ds:data,ss:stack

  2. data segment
  3.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4.     db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  5.     db '1993','1994','1995'
  6.     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  7.     dd 345980,590827,803530,1183000,1843000,2795000,3753000,4649000,5937000
  8.     dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  9.     dw 11542,14430,15257,17800
  10.     dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239
  11.     dw 260,304,333
  12. data ends

  13. table segment
  14.         db 15h dup('year summ ne ?? year summ ne ?? ')
  15. table ends

  16. stack segment
  17.         db 20h dup(0)
  18. stack ends

  19. ;stackB segment
  20. ;        db 20h dup(0)
  21. ;stackB ends

  22. code segment
  23.         start:
  24.                 mov ax,data
  25.                 mov ds,ax
  26.                 mov ax,table
  27.                 mov es,ax
  28.                 mov ax,stack
  29.                 mov ss,ax
  30.                 mov sp,20h
  31.                
  32.                
  33.                 call putyear
  34.                 call putinc
  35.                 call putgz
  36.                 call PUTMon
  37.                 call show_str
  38.                
  39.                 mov ax,4c00h
  40.                 int 21h
  41.                
  42.                
  43.                
  44.                 ;---------处理年份--------
  45.                 ;功能:取年份,放到table段每行开头四个字节,结尾加空格
  46.                 ;
  47.                 ;
  48.                 putyear:
  49.                           
  50.                                 mov cx,15h  ;21 次循环
  51.                                 sub si,si   ;source address.
  52.                                 sub bx,bx   ;destionct address .every line
  53.                                 tyoy:                ;Twenty one year
  54.                                   push cx       
  55.                                   sub di,di
  56.                               mov cx,4        ;一个年份4个字符循环4次
  57.                                   sy:
  58.                                    mov al,[si]
  59.                                    mov es:[bx+di],al
  60.                                    inc si
  61.                                    inc di
  62.                                   loop sy
  63.                                           mov al,20h
  64.                                           mov es:[bx+di],al
  65.                                 add bx,20h
  66.                                 pop cx
  67.                             loop tyoy
  68.                                
  69.                                
  70.                                 mov es:2a0h,si        ;保存当前取到的数据的地址
  71.                                
  72.                                
  73.                 ret
  74.                 ;-----------------------------------------------------------
  75.                 putinc:
  76.                                 mov si,es:02a0h                ;取原始数据地址
  77.                                 sub bx,bx                        ;行数计数,从零开始       
  78.                                 mov cx,15h                        ;21行数据循环21次
  79.                                
  80.                                 recnum:
  81.                                 push cx                                 ;保存外循环计数
  82.                                 mov es:2A2h,bx                                ;保存行数计数
  83.                                
  84.                                 ;---准备除法传入参数
  85.                                 mov bx,[si]                                ;低16位数放bx
  86.                             mov ax,[si+2]                                ;高16位数放ax
  87.                                 push si                                                ;保存去数据地址
  88.                                 sub si,si                        ;做计数器用,清零
  89.                                 divzw:
  90.                                     mov cx,10                ;除数放cx
  91.                                     call divdw
  92.                                     add cx,30h                ;数字转换为ascii码
  93.                                 push cx                        ;转换好的数据入栈
  94.                                         inc si                         ;计数入栈次数
  95.                                     mov cx,ax        ;
  96.                                     add cx,dx        ;把商放入cx中
  97.                                     jcxz okk          ;检测为零则跳出
  98.                                         mov bx,ax        ;做过除法后低位放bx
  99.                                         mov ax,dx        ;做过除法后高位放ax
  100.                                 jmp short divzw                 ;循环除法直到商为零(即所有数字都转换为ascii)
  101.                                 okk:       
  102.                                      mov bx,es:2a2h
  103.                                      mov di,05h                    ;每一行的写入偏移量
  104.                                            mov cx,si                ;入栈次数作为循环条件放cx
  105.                                            putnu:
  106.                                              pop es:[bx+di]                ;依次将转换好的数据写入
  107.                                              inc di                                ;
  108.                                            loop putnu
  109.                                           
  110.                                           mov cx,8                        ;----不够8位字节以空格补足8位---
  111.                                           sub cx,si
  112.                                           adspp:
  113.                                               mov al,20h                        ;
  114.                                               mov es:[bx+di],al                ;在一个数末尾加一个空格
  115.                                                   inc di
  116.                                           loop adspp
  117.                                      add bx,20h                                ;写入下一行的行地址
  118.                                
  119.                                        
  120.                                   pop si                                        ;还原取数据地址          
  121.                                   add si,4                                        ;下一个取数地址
  122.                                     
  123.                                   
  124.                                   pop cx                                        ;还原外循环计数
  125.                                 loop recnum
  126.                                
  127.                                 mov es:2a0h,si                   ;保存当前取到数据的地址
  128.                 ret
  129.                 ;--------------------------------------------------------------------------
  130.                 PUTGZ:
  131.                                 mov si,es:02a0h                ;取原始数据地址
  132.                                 sub bx,bx                        ;行数计数,从零开始       
  133.                                 mov cx,15h                        ;21行要放入的数据循环21次
  134.                                
  135.                                 renum:
  136.                                 push cx                                 ;保存外循环计数
  137.                                 mov es:2A2h,bx                                ;保存行数计数
  138.                                
  139.                                 ;---准备除法传入参数
  140.                                 mov ax,[si]                              ;被除数
  141.                           
  142.                                 push si                                        ;保存取数据地址
  143.                                 sub si,si
  144.                                 ;sub bx,bx                        ;做计数器用,清零
  145.                                 divl:
  146.                                         mov dx,0                ;字除法,高位字置零
  147.                                     mov cx,10                ;除数放cx
  148.                                     div cx                        ;商在ax,余数在dx
  149.                                     add dx,30h                ;数字转换为ascii码
  150.                                 push dx                        ;转换好的数据入栈
  151.                                         inc si                         ;计数入栈次数
  152.                                     mov cx,ax        ;
  153.                                     ;add cx,dx        ;把商放入cx中
  154.                                     jcxz ok          ;检测为零则跳出
  155.                                         ;mov bx,ax        ;做过除法后低位放bx
  156.                                         ;mov ax,dx        ;做过除法后高位放ax
  157.                                 jmp short divl                 ;循环除法直到商为零(即所有数字都转换为ascii)
  158.                                 ok:       
  159.                                      mov bx,es:2a2h
  160.                                      mov di,0dh                    ;每一行的写入偏移量
  161.                                            mov cx,si                ;入栈次数作为循环条件放cx
  162.                                            putn:
  163.                                              pop es:[bx+di]                ;依次将转换好的数据写入
  164.                                              inc di                                ;
  165.                                            loop putn
  166.                                           
  167.                                           mov cx,8                        ;----不够5位字节以空格补足5位---
  168.                                           sub cx,si
  169.                                           adsp:
  170.                                               mov al,20h                        ;
  171.                                               mov es:[bx+di],al                ;在一个数末尾加一个空格
  172.                                                   inc di
  173.                                           loop adsp
  174.                                      add bx,20h                                ;写入下一行的行地址
  175.                                
  176.                                        
  177.                                   pop si                                        ;还原取数据地址          
  178.                                   add si,2                                        ;下一个取数地址
  179.                                     
  180.                                   
  181.                                   pop cx                                        ;还原外循环计数
  182.                                 loop renum
  183.                                
  184.                                 mov es:2a0h,si                   ;保存当前取到数据的地址
  185.                 ret
  186.                 ;-----------------------------------------------------------------------
  187.                         PUTMon:
  188.                                 mov si,es:02a0h                ;取原始数据地址
  189.                                 sub bx,bx                        ;行数计数,从零开始       
  190.                                 mov cx,15h                        ;21行要放入的数据循环21次
  191.                                
  192.                                 renumb:
  193.                                 push cx                                 ;保存外循环计数
  194.                                 mov es:2A2h,bx                                ;保存行数计数
  195.                                
  196.                                 ;---准备除法传入参数
  197.                                 mov ax,[si]                              ;被除数
  198.                           
  199.                                 push si                                        ;保存取数据地址
  200.                                 sub si,si
  201.                                 ;sub bx,bx                        ;做计数器用,清零
  202.                                 divll:
  203.                                         mov dx,0                ;字除法,高位字置零
  204.                                     mov cx,10                ;除数放cx
  205.                                     div cx                        ;商在ax,余数在dx
  206.                                     add dx,30h                ;数字转换为ascii码
  207.                                 push dx                        ;转换好的数据入栈
  208.                                         inc si                         ;计数入栈次数
  209.                                     mov cx,ax        ;
  210.                                     ;add cx,dx        ;把商放入cx中
  211.                                     jcxz okkk          ;检测为零则跳出
  212.                                         ;mov bx,ax        ;做过除法后低位放bx
  213.                                         ;mov ax,dx        ;做过除法后高位放ax
  214.                                 jmp short divll                 ;循环除法直到商为零(即所有数字都转换为ascii)
  215.                                 okkk:       
  216.                                      mov bx,es:2a2h
  217.                                      mov di,015h                    ;每一行的写入偏移量
  218.                                            mov cx,si                ;入栈次数作为循环条件放cx
  219.                                            putnn:
  220.                                              pop es:[bx+di]                ;依次将转换好的数据写入
  221.                                              inc di                                ;
  222.                                            loop putnn
  223.                                           
  224.                                           mov cx,4                        ;----不够4位字节以空格补足5位---
  225.                                           sub cx,si
  226.                                           adsppp:
  227.                                               mov al,20h                        ;
  228.                                               mov es:[bx+di],al                ;在一个数末尾加一个空格
  229.                                                   inc di
  230.                                                   loop adsppp
  231.                                                   mov al,0                                ;每行末尾加0
  232.                                                   mov es:[bx+di],al
  233.                                      add bx,20h                                ;写入下一行的行地址
  234.                                
  235.                                        
  236.                                   pop si                                        ;还原取数据地址          
  237.                                   add si,2                                        ;下一个取数地址
  238.                                     
  239.                                   
  240.                                   pop cx                                        ;还原外循环计数
  241.                                 loop renumb
  242.                                
  243.                                 mov es:2a0h,si                   ;保存当前取到数据的地址
  244.                 ret
  245.                 ;-----------------------------------------------------------------------------
  246.                 divdw:        ;---双字除法---
  247.                                 ;参  数:除数放cx,高16位数放ax,低16位数放bx
  248.                                 ;返回值:高位商放dx,低位商放ax,余数放cx
  249.                         push bx                                ;不用作返回参数的寄存器保持原状
  250.                        
  251.                         sub dx,dx                        ;字除法dx会参与,将dx置零
  252.                         div cx                                ;div后,商在ax,余数在dx
  253.                         push ax                                ;保存高位除法的商
  254.                        
  255.                         mov ax,bx
  256.                         div cx                                ;做低位除法--相当于[mod(H/N)X10000h+L]/0Ah
  257.                         mov cx,dx                        ;余数放cx
  258.                         pop dx                                ;高位除法商放dx
  259.                        
  260.                         pop bx                                ;;不用作返回参数的寄存器恢复原状
  261.                 ret
  262.                 ;----------------------------------------------------------------------------------------
  263.                 show_str:
  264.                 call cls
  265.                 push ds
  266.                         mov ax,0b800h     ;
  267.                         mov ds,ax
  268.                         sub si,si
  269.                         sub di,di
  270.                        
  271.                        
  272.                         sub bx,bx
  273.                         sub dx,dx
  274.                         mov cx,15h
  275.                         showall:
  276.                                 push cx
  277.                                 showln:
  278.                                     
  279.                                 
  280.                                 mov al,es:[si]
  281.                                 mov ah,02
  282.                                 mov 28[bx+di],al
  283.                                 mov 29[bx+di],ah
  284.                                 inc si
  285.                                 inc di
  286.                                 inc di
  287.                                 mov ah,0
  288.                                 mov cx,ax
  289.                                 jcxz over
  290.                                 jmp showln
  291.                             over:
  292.                                 mov ax,0a0h
  293.                                 inc dx
  294.                                 push dx
  295.                                 push dx
  296.                                 mul dx
  297.                                 mov bx,ax
  298.                                 mov cx,20h
  299.                                 pop dx
  300.                                 mov ax,dx
  301.                                 mul cx
  302.                                 ;add ax,ax
  303.                                 mov si,ax
  304.                                
  305.                                 sub di,di
  306.                                 pop dx
  307.                            pop cx
  308.                         loop showall
  309.                 pop ds
  310.                 ret
  311.                 cls:
  312.                    push ax
  313.                    push cx
  314.                    push es
  315.                    push si
  316.                    mov cx,3840
  317.                    mov ax,0b800h
  318.                    mov es,ax
  319.                    sub si,si
  320.                    sc:mov ax,0
  321.                      mov es:[si],ax
  322.                      inc si
  323.                          loop sc
  324.                    pop si
  325.                    pop es
  326.                    pop cx
  327.                    pop ax
  328.                 ret
  329.        
  330.                
  331.                
  332. code ends
  333. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 07:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表