精华内容
下载资源
问答
  • 用指针SI来访问整个数组 again: MOV BX, word ptr [SI] CMP BX, 0 JL over ADD AX, BX ADC DX, 0 ;把当前数组元素之加到(DX,AX)中 INC CX ;数组元素个数加1 ADD SI, 2 JMP again over: JCXZ exit ;防止零作除数,...
    DATA1 SEGMENT 
    data DW 90, 95, 54, 65, 36, 78, 66, 0, 99, 50, -1 
    Average DW 0 
    DATA1 ENDS 
    CODE1 SEGMENT 
    ASSUME CS:CODE1, DS:DATA1 
    START: MOV AX, DATA1 
    MOV DS, AX 
    XOR AX, AX 
    XOR DX, DX ;用(DX,AX)来保存数组元素之和 
    XOR CX, CX ;用CX来保存数组元素个数 
    LEA SI, data ;用指针SI来访问整个数组 
    again: MOV BX, word ptr [SI] 
    CMP BX, 0 
    JL over 
    ADD AX, BX 
    ADC DX, 0 ;把当前数组元素之值加到(DX,AX)中 
    INC CX ;数组元素个数加1 
    ADD SI, 2 
    JMP again 
    over: JCXZ exit ;防止零作除数,即数组是空数组 
    DIV CX 
    MOV Average, AX 
    exit: MOV AX, 4C00H 
    INT 21H 
    CODE1 ENDS 
    END START 

     

    score的平均整数,并存入内存字变量Average中,数组以-1为结束标志。

     

     xor eax,eax

     是异或运算,两数相反为1;两数相同为0。由于这两个数相同,异或后等于清0 ;由于它比mov eax,0效率高,所以一般用它。

     

    LEA 取有效地址指令 (Load Effective Address )
    取源操作数地址的偏移量,并把它传送到目的操作数所在的单元。

    下面两条指令就是等价的,他们都取TABLE的偏移地址,然后送到BX中,即

    LEA BX,TABLE
    MOV BX,OFFSET TABLE

     

    带进位加法指令 ADC(Addition Carry)
    格式
    ADC OPRD1,OPRD2
    功能
    OPRD1<--OPRD1 + OPRD2 + CF
    说明
    1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.
    OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.
    2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数.
    3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.
    4. 该指令对标志位的影响同ADD指令.

     

    div是除法指令,使用div做除法的时候应注意以下问题:
    1、除数:有8位和16位两种,在一个寄存器或者内存中。
    2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,如果除数为16位,被除数为32位,被  除数则在(DX和AX)中存放,DX存放高16位,AX存放低16位。
    3、结果:如果除数是8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数是16位,则AX存储除法操作的商,DX存储除法操作的余数。
    格式如下:
    div reg
    div 内存单元
    以100001/100为例,100001大于65535,所以只能用dx和ax两个寄存器联合存放100001,也就是说要进行16位的除法。除数100小于255,可以在一个8位的寄存器中存放,但是被除数是32位的,除数应为16位,所以要使用一个16位的寄存器来存放除数100.
    dx和ax分别存放100001的高16位和低16位值,所以将100001表示为16进制的形式:186a1h.

     

    data1段的地址被编译为00710h,10个数据被放入此;但是为什么在模拟器中此地址出现在栈的模拟中;

     

    0710被放入DS寄存器;SI目前是0;

    第一个数被放入BX中;over标号编译后的地址为020h;

     

    第一个数加完,AX为5A(10进制的90);

    看BX是否为0;

    加完一个数,CX为1;

    SI指向下一个数;again编译后的地址为0Eh;

    累加;结果在AX中;

    加完,看CX为10,AX为0279h=10进制的633;

    看前面图,在整个过程中进位标志CF一直未变;

    看变量窗口,除完后的结果为003Fh,此结果不包括余数;

     

     

    展开全文
  • 一个项目中,使用DBGrideh,当使用自带的内存数据集时,对于Footers添加的求平均值,一直显示为0,其他汇总数据都是可以的,而切换使用TClientDataSet或者TADODataSet,所有汇总数据包括平均值都有值。 打开相关...

    在一个项目中,使用DBGrideh,当使用自带的内存数据集时,对于Footers添加的求平均值,一直显示为0,其他汇总数据都是可以的,而切换使用TClientDataSet或者TADODataSet,所有汇总数据包括平均值都有值。

    打开相关部分源码查看了下,发现DBGrideh自带的内存数据集关于汇总平均数这块,竟然没有处理……,什么情况?

    原始相关函数:

    procedure TCustomMemTableEh.GetAggregatedValuesForRange(FromBM, ToBM: TUniBookmarkEh;
      FieldName: String; var ResultArr: TAggrResultArr; AggrFuncs: TAggrFunctionsEh);
    var
      FromRN, ToRN: Integer;
      i: Integer;
      v: Variant;
      VarTypeNum: Integer;
      FieldIndex: Integer;
    begin
      ResultArr[agfSumEh] := Null;
      ResultArr[agfCountEh] := 0;
      ResultArr[agfAvg] := Null;
      ResultArr[agfMin] := Null;
      ResultArr[agfMax] := Null;
      if not Active then Exit;
      if FromBM <> NilBookmarkEh then
        if UniBookmarkValid(FromBM)
          then FromRN := UniBookmarkToRecNo(FromBM)
          else Exit
      else
        FromRN := 1;
      if ToBM <> NilBookmarkEh then
        if UniBookmarkValid(ToBM)
          then ToRN := UniBookmarkToRecNo(ToBM)
          else Exit
      else
        ToRN := RecordCount;
    
      if (FieldName = '') and (AggrFuncs = [agfCountEh]) then
      begin
        for i := FromRN-1 to ToRN-1 do
          ResultArr[agfCountEh] := ResultArr[agfCountEh] + 1;
        Exit;  
      end;
    
      if FRecordsView.MemTableData.DataStruct.FindField(FieldName) = nil then
        Exit;
      VarTypeNum := FRecordsView.MemTableData.DataStruct.FieldByName(FieldName).GetVarDataType;
      FieldIndex := FRecordsView.MemTableData.DataStruct.FieldIndex(FieldName);
      for i := FromRN-1 to ToRN-1 do
      begin
        v := FRecordsView.RecordView[i].Rec.Value[FieldIndex, dvvValueEh];
        if not VarIsNullEh(v) then
        begin
          if (agfCountEh in AggrFuncs) or (agfAvg in AggrFuncs) then
            ResultArr[agfCountEh] := ResultArr[agfCountEh] + 1;<span style="white-space:pre">			</span>//当设置求平均值时,此处仅仅做了一次记数累计
          if (VarTypeNum in [varSmallint, varInteger, varSingle, varDouble, varCurrency,
    {$IFDEF EH_LIB_6}
             varShortInt, varWord, varInt64, varLongWord,
    {$ENDIF}
             varByte, varDate]) or (VarTypeNum = varFMTBcd) then
          begin
            if (agfSumEh in AggrFuncs) and (VarTypeNum <> varDate) then
              if VarIsNullEh(ResultArr[agfSumEh])
                then ResultArr[agfSumEh] := v
                else ResultArr[agfSumEh] := ResultArr[agfSumEh] + v;
    
            if agfMin in AggrFuncs then
    	        if VarIsNullEh(ResultArr[agfMin]) then
                ResultArr[agfMin] := v
              else if ResultArr[agfMin] > v then
                ResultArr[agfMin] := v;
    
            if agfMax in AggrFuncs then
              if VarIsNullEh(ResultArr[agfMax]) then
                ResultArr[agfMax] := v
              else if ResultArr[agfMax] < v then
                ResultArr[agfMax] := v;
          end
        end;
      end;
    
      if <span style="color:#ff0000;">agfMax</span> in AggrFuncs then<span style="white-space:pre">				</span>//求平均值,此处的触发条件竟然是 agfMax ....
        if not VarIsNullEh(ResultArr[agfSumEh]) then
          ResultArr[agfAvg] := <span style="color:#ff0000;">ResultArr[agfSumEh]</span> / ResultArr[agfCountEh];  //此处因为没有在agfAvg时对agfSumEh 求和汇总,该值应为0;
    end;

    修改方法:

    1、打开MemTableEh.pas

    2、找到GetAggregatedValuesForRange函数,修改成如下:

    procedure TCustomMemTableEh.GetAggregatedValuesForRange(FromBM, ToBM: TUniBookmarkEh;
      FieldName: String; var ResultArr: TAggrResultArr; AggrFuncs: TAggrFunctionsEh);
    var
      FromRN, ToRN: Integer;
      i: Integer;
      v: Variant;
      VarTypeNum: Integer;
      FieldIndex: Integer;
    begin
      ResultArr[agfSumEh] := Null;
      ResultArr[agfCountEh] := 0;
      ResultArr[agfAvg] := Null;
      ResultArr[agfMin] := Null;
      ResultArr[agfMax] := Null;
      if not Active then Exit;
      if FromBM <> NilBookmarkEh then
        if UniBookmarkValid(FromBM)
          then FromRN := UniBookmarkToRecNo(FromBM)
          else Exit
      else
        FromRN := 1;
      if ToBM <> NilBookmarkEh then
        if UniBookmarkValid(ToBM)
          then ToRN := UniBookmarkToRecNo(ToBM)
          else Exit
      else
        ToRN := RecordCount;
    
    
      if (FieldName = '') and (AggrFuncs = [agfCountEh]) then
      begin
        for i := FromRN-1 to ToRN-1 do
          ResultArr[agfCountEh] := ResultArr[agfCountEh] + 1;
        Exit;  
      end;
    
    
      if FRecordsView.MemTableData.DataStruct.FindField(FieldName) = nil then
        Exit;
      VarTypeNum := FRecordsView.MemTableData.DataStruct.FieldByName(FieldName).GetVarDataType;
      FieldIndex := FRecordsView.MemTableData.DataStruct.FieldIndex(FieldName);
      for i := FromRN-1 to ToRN-1 do
      begin
        v := FRecordsView.RecordView[i].Rec.Value[FieldIndex, dvvValueEh];
        if not VarIsNullEh(v) then
        begin
          if (agfCountEh in AggrFuncs) or (agfAvg in AggrFuncs) then
            ResultArr[agfCountEh] := ResultArr[agfCountEh] + 1;
          if (VarTypeNum in [varSmallint, varInteger, varSingle, varDouble, varCurrency,
    {$IFDEF EH_LIB_6}
             varShortInt, varWord, varInt64, varLongWord,
    {$ENDIF}
             varByte, varDate]) or (VarTypeNum = varFMTBcd) then
          begin
            if <span style="color:#009900;">((agfSumEh in AggrFuncs) or (agfAvg in AggrFuncs))</span> and (VarTypeNum <> varDate) then  <span style="color:#3333ff;">//此处修改</span>
              if VarIsNullEh(ResultArr[agfSumEh])
                then ResultArr[agfSumEh] := v
                else ResultArr[agfSumEh] := ResultArr[agfSumEh] + v;
    
    
            if agfMin in AggrFuncs then
    <span style="white-space:pre">	</span>        if VarIsNullEh(ResultArr[agfMin]) then
                ResultArr[agfMin] := v
              else if ResultArr[agfMin] > v then
                ResultArr[agfMin] := v;
    
    
            if agfMax in AggrFuncs then
              if VarIsNullEh(ResultArr[agfMax]) then
                ResultArr[agfMax] := v
              else if ResultArr[agfMax] < v then
                ResultArr[agfMax] := v;
          end
        end;
      end;
    
    
      if <span style="color:#009900;">agfAvg </span>in AggrFuncs then    <span style="color:#3333ff;">//此处修改</span>
        if not VarIsNullEh(ResultArr[agfSumEh]) then
          ResultArr[agfAvg] := ResultArr[agfSumEh] / ResultArr[agfCountEh];
    end;



    展开全文
  • 已知首地址为DATA的字数组中存放一系列有符号数(首元素为数据个数),试编写一个程序出它们的平均值放在变量AVER中,并出数组中有多少个数大于该平均值,将大于平均值的元素个数保存变量COUNT中。...

    已知在首地址为DATA的字数组中存放一系列有符号数(首元素为数据个数),试编写一个程序求出它们的平均值放在变量AVER中,并求出数组中有多少个数大于该平均值,将大于平均值的元素个数保存在变量COUNT中。(注意,这些数据的累加和可能超出-32768~32767之间)

    DATA1 SEGMENT
         DATA DW 10,1,2,3,4,5,6,-7,-8,-9,10
    	 AVER DW 5
    	 COUNT DW ?
    DATA1 ENDS
    
    STACK SEGMENT
          DW 10 DUP(?)
    TOP LABEL WORD
    STACK ENDS	  
    
    CODE SEGMENT
       ASSUME CS:CODE,SS:STACK,DS:DATA1 
    MAIN PROC FAR
         MOV AX,STACK
    	 MOV SS,AX
    	 LEA SP,TOP
    	 MOV AX,DATA1 
    	 MOV DS,AX	
    	 LEA SI,DATA 
    	 MOV CX,[SI]
    	 ADD SI,2
    	 PUSH SI 
    	 PUSH CX 
    	 MOV BX,0
    	 MOV DX,0
    	 CLD 
      L1:LODSW
         CMP AX,0
         JL L
    	 ADD BX,AX
    	 ADC DX,0
    	 JMP L4
      L:NEG AX
        SUB BX,AX
        SBB DX,0
      L4:LOOP L1
    	 POP CX 
    	 MOV AX,BX
    	 IDIV CX 
    	 MOV AVER,AX
    	 POP SI 
    	 MOV DX,0 
    	 CLD 
      L2:LODSW
         CMP AX,AVER
    	 JNG L3 
    	 INC DX 
      L3:LOOP L2 
         MOV COUNT,DX
    	 MOV AH,4CH
    	 INT 21H
    MAIN ENDP 
    CODE ENDS 
         END MAIN 
    

    注意知识点:

    (1)求平均数,求和时要先判断是争还是负在进行加减法,不能直接用加法。
    (2)求平均时,直接用有符号除法,比较大小也是用有符号比较。

    展开全文
  • 编写程序,出它们的平均值放在AX中;并出数组中有多少个数;小于此平均值,将结果放在BX中DATAS SEGMENTDATA DW 1,2,3,4,5,6,7,8,9,5COUNT DW ($-DATA)/2CRLF DB 0AH,0DH,'$'DATAS ENDSSTACK SEGMENT PARA STACK...
    ;在首地址为DATA的字数组中,存放了100H个16位补码数
    ;编写程序,求出它们的平均值放在AX中;并求出数组中有多少个数
    ;小于此平均值,将结果放在BX中
    DATAS SEGMENT
    DATA DW 1,2,3,4,5,6,7,8,9,5
    COUNT DW ($-DATA)/2
    CRLF  DB 0AH,0DH,'$'
    DATAS ENDS


    STACK SEGMENT PARA STACK
          DW 128 DUP(?)
    TOP   LABEL WORD
    STACK ENDS


    CODE SEGMENT
         ASSUME CS:CODE,SS:STACK,DS:DATAS
    MAIN PROC FAR
    START:
             MOV AX,DATAS
    MOV DS,AX
     
    MOV AX,STACK
    MOV SS,AX
    LEA SP,TOP
     
    LEA SI,DATA
    MOV CX,COUNT
     
    XOR AX,AX          ;清零AX,DX用于存放累加结果和被除数
    XOR DX,DX
     
    L1: MOV BX,[SI]        ;累加
    ADD AX,BX
    ADD SI,2
    LOOP L1
     
    MOV BX,COUNT       ;求平均值
    DIV BX
    XOR BX,BX
     
    MOV CX,COUNT
    LEA SI,DATA
    L3: MOV DX,[SI]         ;求小于平均值的数的个数
    CMP AX,DX
    JLE L2
    INC BX
    L2:    ADD SI,2
             LOOP L3
     
    MOV DL,AL          ;用于测试结果正确与否,与程序本身无关
    ADD DL,30H
    MOV AH,2
    INT 21H
     
    MOV AH,9
    LEA DX,CRLF
    INT 21H
     
    MOV DL,BL
    ADD DL,30H
    MOV AH,2
    INT 21H
     
    MOV AH,4CH
    INT 21H
    CODE ENDS
    MAIN ENDP
         END START
    展开全文
  • word2vec——高效word特征

    万次阅读 2015-06-07 16:07:36
    继上次分享了经典统计语言模型,最近公众号中有很多做NLP朋友问到了关于word2vec的相关内容, 本文就这里整理一下做以分享。 本文分为 概括word2vec 相关工作 模型结构 Count-based方法 vs. Directly predict 几...
  • 如何用Hadoop计算平均值

    千次阅读 2013-07-10 09:28:10
    如何用Hadoop计算平均值 数据 data.txt a 2 a 3 a 4 b 5 b 6 b 7 代码 import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.f
  • 1.设有三个无符号的个位数,计算这三个数的平均值(截尾取整),并将这个平均值显示屏幕上。 最低要求:三个个位数数据段中定义,最后结果能显示屏幕上。 自由发挥:三个个位数从键盘输入,输入时有提示(可用...
  • HadoopMapReduce求平均成绩

    千次阅读 2018-05-14 11:06:33
    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache....用成绩和除以成绩个数,即输出key为姓名,value为平均成绩。
  • 如何在word中像LaTeX一样键入公式

    万次阅读 多人点赞 2018-01-30 16:38:42
    如何在word中像LaTeX一样键入公式 小伙伴们下学期就要开始写毕业论文了,大多数同学应该会选择word,不可避免的会有很多嵌套的公式需要大家添加文本当中。 LaTeX中,公式、矩阵等都可以用键盘键入,操作起来...
  • Java MKT(平均动力学温度)计算

    千次阅读 2019-12-11 14:36:31
    公式这里找的 ... (开尔文和摄氏度的关系) n表示记录温度的总次数 ...假设有2个温度平均值( 23°C 、25°C ),即n = 2 先列一下 各项的值(先列表,再把公式上的用表的数据代替 最后才计...
  • 词向量求平均合成句向量

    千次阅读 2018-07-21 19:32:23
    list=word_vec[word]+list #向量对应相加 print(list) print(count) except: continue print(count) if count !=0: list=list/count print(list) list=list.tolist() # 变回List容易增加项 和 SVM...
  • 词嵌入来龙去脉 word embedding、word2vec

    万次阅读 多人点赞 2017-08-14 21:57:45
    0词嵌入来龙去脉 NLP的核心关键语言表示Representation NLP词的表示方法类型 1词的独热表示one-hot representation 2词的分布式表示distributed representation NLP语言模型 ...词嵌入 word embedding
  • word2vec和word embedding有什么区别?

    千次阅读 2017-12-18 11:26:29
    作者:Scofield链接:...很好,正好可借此机会介绍词向量、word2vec以及DeepNLP整套相关的东西:文章很长,是从CSDN上写好复制过来的,亦可直接跳到博客观看:深度学习(Deep Learning)
  • 1、Word表格求平均值 点击【数据】,输入公式 【=AVERAGE(LEFT)】即可,然后按快捷键F4重复上步操作,这是表格就可以求平均值了。   2、Word表格求和 点击【布局】-【数据】-【公式】, 输入公式=SUM(LEFT)...
  • 机器学习算法实现解析——word2vec源码解析

    万次阅读 多人点赞 2017-03-16 16:32:44
    阅读本文之前,建议首先阅读“简单易学的机器学习算法——word2vec的算法原理”,掌握如下的几个概念: 什么是统计语言模型 神经概率语言模型的网络结构 CBOW模型和Skip-gram模型的网络结构 Hierarchical Softmax...
  • spark Word2Vec+LSH相似文本推荐(scala)

    千次阅读 热门讨论 2018-09-15 19:50:22
    在上一篇博客,我们使用spark CountVectorizer与IDF进行了关键词提取,博客地址: ...这里我们需要使用到两个算法:Word2Vec与LSH。 其中Word2Vec即将词转换为词向量,这样词之间的关系就可以向量距...
  • 词向量Word Vectors学习笔记--word2vec

    千次阅读 2018-04-15 15:51:20
    Word Vectors将单词编码成向量,将其表示成词空间中的某一点。每一维都可看作是某些语义信息的编码。one-hot vector:最简单的词向量,将每个单词表示成一个 |V|*1维的向量。|V|是词表大小,其词表中的索引位置...
  • Word2Vec解释

    万次阅读 多人点赞 2018-04-17 15:46:51
    Word2Vec解释 一、Word2Vec梗概 字面意思:即Word to Vector,由词到向量的方法。 专业解释:Word2Vec使用一层神经网络将one-hot(独热编码)形式的词向量映射到分布式形式的词向量。使用了Hierarchical ...
  • Spark RDD中的aggregate函数 -JAVA8 lambda风格实现求平均
  • 关于word2vec 句子相似度计算

    千次阅读 2018-01-16 11:10:01
    生成词向量之后,基于词向量计算... 首先根据s1的句子,找到是s1中第一个词语的第二句话中的最大相似值,再依次找到第二个,第三个,取平均值作为s1 ->s2句子的单项匹配 3.最后取双向匹配的平均值作为 ...
  • 前言: 由于对C#操作WORD不熟悉,也就留下这么一篇水文,别吐糟...=_=||| ...我的需求很简单,从DataTable里面循环取数据批量生成Word文档,解决方案是利用Word模板.dot插入书签并保存为程序使用的模板
  • word2vec源码详解

    万次阅读 多人点赞 2018-05-09 12:00:11
      已经看了很久的word2vec,但是发现了很多不同版本的解释,再加上原始论文没有提到太多的细节,所以打算直接看一遍源码,一方面可以加深自己理解;另一方面,以后也可以做适当的改进! 源码分析请参考本人github...
  • 算术平均、几何平均、调和平均、平方平均和移动平均跟计算编程有什么关系:Just One Word,不能只会算术平均数,还有其他很多选择,以及不同场景使用不同的平均数。 算术平均 算术平均(Arithmetic mean)是最...
  • [深度学习] 一篇文章理解 word2vec

    千次阅读 2019-01-03 16:21:26
    这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的为 1,这个向量就代表了当前的词。 考虑一下的三个特征: ["male", "female"] ["from Europe", "from US", "from Asia"...
  • 一直有点没明白标题中三者的关系,此记录下来自己查阅之后的看法,有不对的地方,请大家指正,谢谢! 关于NLP中,有各种不同的表达,如:词向量、word embedding、分布式表示、word2vec、glove等等,这一锅粥的...
  • MR案例之实现平均成绩

    千次阅读 2016-03-27 21:57:24
    MR实现平均成绩mapreduce是否可以完成我们传统...2.map在求平均值的作用是什么?3.reduce在求平均值的作用是什么? 一、简介:"平均成绩"主要目的还是在重温经典"WordCount"例子,可以说是在基础上的微变化版,该实例主
  • word2vec API

    千次阅读 2016-12-04 09:30:18
    class gensim.models.word2vec.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negativ
  • Word学习笔记分享

    千次阅读 2019-02-22 13:57:10
    第一章、Word 的常规排版 1-5 文字选择 Ctrl+鼠标选取——多选 Alt+鼠标选取——框选 1-11 文字效果 为文字添加填充与边框 1-13 字体其他效果 为字体添加着重号、删除线、上下标等效果 Ctrl+D ——打开字体选项栏 1-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,678
精华内容 13,871
关键字:

在word求平均值