2010年11月5日

DATAS  SEGMENT
    FIVE    DB    
5
    X        DB    ?
    STR1    DB    'INPUT ONE NUM'
,'$'
DATAS  ENDS

STACKS  SEGMENT
      DB  
128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES
,DS:DATAS,SS:STACKS
START:
    MOV        AX
,DATAS
    MOV        DS
,AX
    
    MOV        DX
,OFFSET    STR1
    MOV        AH
,9
    INT        21H
    
    MOV        AL
,FIVE
    ADD        AL
,3
    ADD        AL
,30H
    MOV        DL
,AL
    MOV        AH
,2
    INT        21H
    
    MOV        AH
,4CH
    INT        21H
CODES  ENDS
    END  START

posted @ 2010-11-05 17:31 JimmyZhang 阅读(55) | 评论 (0)编辑 收藏

;练习使用模板的Helloworld
.MODEL SMALL
.386
.DATA
    DA1 DB 'Hello world!'
    DB 0DH
,0AH,'$'
.STACK
    ST1  DB    
100 DUP(?)
.CODE
.STARTUP
    MOV AH
,9
    MOV DX
,OFFSET DA1
    INT     21H
.EXIT 
0
END

posted @ 2010-11-05 15:57 JimmyZhang 阅读(63) | 评论 (0)编辑 收藏

2010年11月2日

;两个多位十进制数相乘,并将结果送屏幕显示
DATAS SEGMENT
    X        DB    
4,5,6,7        ;定义被乘数
    N1        EQU    $-X
    Y        DB    
1,2,3,4        ;定义乘数
    N2        EQU    $-Y
    Z        DB    30H    DUP(?)
    P        DB    '4567X1234
='
    Q        DB    30H    DUP(?)
DATAS ENDS

STACKS SEGMENT    STACK    'STACK'        
    DW        50H    DUP(?)
    TOP        LABEL    WORD
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES
,DS:DATAS,SS:STACKS
MAIN    PROC    FAR
START:
    MOV     AX
,DATAS
    MOV     DS
,AX
    MOV        AX
,STACKS
    MOV        SS
,AX
    MOV        SP
,OFFSET    TOP
    MOV        CL
,4
    MOV        SI
,0
    MOV        BX
,N2
LOOP1:
    MOV        CH
,Y[BX-1]
    CALL    MMUL
    INC        SI
    DEC        BX
    JNZ        LOOP1
    MOV        SI
,DX
    MOV        BX
,0
ASC:
    MOV        AL
,Z[SI]
    AND        AL
,0FH
    OR        AL
,30H
    MOV        Q
[BX],AL
    INC        BX
    DEC        SI
    CMP        SI
,0
    JNL        ASC
    MOV        Q
[BX],'$'
DISP:
    MOV        AH
,9
    MOV        DX
,OFFSET    P
    INT        21H
    MOV        AH
,4CH
    INT        21H
    RET
MAIN    ENDP
MMUL    PROC    NEAR        
;两个多位十进制数相乘,并输出结果
    PUSH    SI
    PUSH    BX
    MOV        BX
,N1
LOOP2:
    MOV        AL
,X[BX-1]
    CALL    MULS
    CALL    DOUT
    INC        SI
    DEC        BX
    JNZ        LOOP2
    POP        BX
    POP        SI
    RET
MMUL    ENDP
MULS    PROC    NEAR
    PUSH    BX
    MOV        BL
,CH
    AND        AL
,0FH
    AND        BL
,0FH
    MUL        BL
    AAM
    POP        BX
    RET
MULS    ENDP
DOUT    PROC    NEAR
    PUSH    SI
NEXT:
    ADD        AL
,Z[SI]
    AAA
    MOV        Z
[SI],AL
    MOV        AL
,AH
    XOR        AH
,AH
    INC        SI
    MOV        DX
,SI
    CMP        AL
,0
    JNZ        NEXT
    POP        SI
    RET
DOUT    ENDP

CODES ENDS
    END START

posted @ 2010-11-02 16:02 JimmyZhang 阅读(476) | 评论 (0)编辑 收藏

2010年11月1日

;子程序名:AS2BIN
;
输入参数:DX=字符串的偏移量,CX=字符串的字符个数
;
输出参数:CF=0,则AX=二进制数。CF=1,则字符串非法,AX=0
;
使用寄存器:SI,BX

AS2BIN    PROC    FAR
    PUSH    CX
    PUSH    DX
    PUSH    SI
    MOV        SI
,DX        ;DX存到SI中
    CMP        CX,6
    JA        ERR            
;为高于/不低于等于的转移指令;字符串的字符个数大于6则出错
    CLD                    ;置DF=0
    MOV        AL,[SI]        ;查符号
    CMP        AL,'-'
    JNE        CHK
    MOV        MINU
,1
    JMP        DECS
CHK:
    CMP        AL
,'+'
    JNE        CLRD
DECS:
    DEC        CX
    INC        SI
CLRD:
    SUB        DX
,DX        ;DX清零,放结果
NEXT:
    CALL    CHE            
;乘十
    JC        ERR
    LODSB                
;读下一个字符到AL
    CMP        AL,'0'
    JB        ERR
    CMP        AL
,'9'
    JA        ERR            
;大于9或者小于0都出错
    AND        AX,000FH    ;转换成二进制数
    ADD        DX,AX
    JC        ERR            
;累加和超过65535出错;CF=1时出错
    LOOP    NEXT
    MOV        AX
,DX        ;结果送入AX
    CMP        MINU,1        ;负数求补
    JNE        EXIT
    NEG        AX
    JMP        EXIT    
ERR:
    STC
    MOV        AX
,0
EXIT:
    POP        SI
    POP        DX
    POP        CX
    RET
CHE    PROC    NEAR        
;乘10子程序
    PUSH    BX
    MOV        BX
,DX
    SHL        DX
,1
    SHL        DX
,1
    ADD        DX
,BX
    SHL        DX
,1
    POP        BX
    RET
CHE    ENDP
AS2BIN    ENDP
    

posted @ 2010-11-01 10:58 JimmyZhang 阅读(55) | 评论 (0)编辑 收藏

2010年10月31日

;子程序名:B2TOBCD
;
输入参数:AX=十六位二进制数
;
输出参数:CF=0,则AX=四位压缩型BCD码。CF=1,则要转换的数大于9999,AX不变。
;
使用寄存器:CX:存放除数,DX:存放中间结果。

B2TOBCD    PROC    FAR
    CMP        AX
,9999
    JBE        TRAN    
;低于等于/不高于时转移
    STC                ;置CF=1
    JMP        EXIT
TRAN:
    PUSH    CX
    PUSH    DX
    SUB        DX
,DX    ;DX清零
    MOV        CX,1000    ;计算千位数
    DIV        CX        ;(AX)<--(DX)(AX)/OPRD,(DX)<--(DX)(AX) MOD OPRD;1字=2字节
    XCHG    AX,DX    ;商在DX中,余数在AX中
    MOV        CL,4
    SHL        DX
,CL    ;DX左移4位
    MOV        CL,100    ;计算百位数
    DIV        CL        ;(AL)<--(AX)/OPRD,(AH)<--(AX)MOD OPRD
    ADD        DL,AL    ;百位数加到DL中
    MOV        CL,4
    SHL        DX
,CL    ;DX左移4位
    XCHG    AL,AH    ;余数保存在AL中
    SUB        AH,AH    ;AH清零
    MOV        CL,10    ;计算十位数
    DIV        CL
    ADD        DL
,AL
    MOV        CL
,4
    SHL        DX
,CL
    ADD        DL
,AH    ;加个位数
    MOV        AX,DX    ;结果送到AX中
    POP        DX
    POP        CX
EXIT:
    RET
B2TOBCD    ENDP

posted @ 2010-10-31 12:11 JimmyZhang 阅读(101) | 评论 (0)编辑 收藏

2009年1月20日

1.首先使用map需要

#include<map>
2.map的构造函数为
Map<key,value> arrayName;
如果想建立关键字为int型,以string型为数据元的数组(数组其实更容易理解)则:
Map<intstring> mapStudent;
3.三种插入方式:
用insert方法插入pair对象:
mapStudent.insert(pair<intstring>(1, “student_one”));

用insert方法插入type_value对象:
mapStudent.insert(map<intstring>::value_type (1, “student_one”));

用数组方式插入值:
mapStudent[1=  “student_one”;

4.数组的大小:
Int nSize = mapStudent.size();

5.三种遍历方式:
用迭代器正向遍历:
定义迭代器:
map<intstring>::iterator  iter; 

 

正向遍历:

for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
    Cout
<<iter->first<<”   ”<<iter->second<<end;

用反向迭代器反向遍历:
定义反向迭代器
map<intstring>::reverse_iterator  iter;

反向遍历
for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)
       Cout
<<iter->first<<”   ”<<iter->second<<end;
用数组方式查看:
for(int i=0;i<mapStudent.size();i++)cout<<mapStudent[i]<<endl;


这些对我基本够用,如果要求更详细可以参考:
http://www.kuqin.com/cpluspluslib/20071231/3265.html


posted @ 2009-01-20 01:04 JimmyZhang 阅读(544) | 评论 (0)编辑 收藏

2008年12月1日

Prim笔记
为了防止以后忘记,写个笔记。
1。建图,只会用邻接矩阵。
2。一个used数组长度为图的大小,记录使用过的点。
3。一个v数组,用来记录最小生成树的边,每个点相应的值是这个点所在树枝的长度。
4。一个找最小枝的函数,minn,返回到最小生成树距离最短的点的编号。
5。prim函数,循环n次,每次将找到的最小的点标为used,然后看生成树到各个点的距离是不是比这个点到各个点的距离大,是则更新v集合。途中可以实现题目要求的目的,例如求和,求最大最小值。
6。v集合是最小生成树到各个点的距离。

posted @ 2008-12-01 21:41 JimmyZhang 阅读(65) | 评论 (0)编辑 收藏

仅列出标题