lovegydx 发表于 2007-1-8 09:23

[求助]用汇编语言编九九乘法表程序!

在屏幕上显示如下:<BR>1*1= 1 <BR>1*2= 2 2*2= 4 <BR>1*3= 3 2*3= 6 3*3= 9 <BR>1*4= 4 2*4= 8 3*4=12 4*4=16 <BR>1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25 <BR>1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 <BR>1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 <BR>1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 <BR>1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 <BR>在这里谢谢各位啦<BR>

lefttime 发表于 2007-1-11 18:08

<P>又是一道:来个例子吧<BR>CR  MACRO                ;换行宏<BR>    MOV    AH,2<BR>    MOV    DL,0AH<BR>    INT    21H<BR>    MOV    DL,0DH<BR>    INT    21H<BR>    ENDM<BR>SHOW    MACRO            ;显示乘积的宏<BR>    LOCAL  NEXT1<BR>    MOV    AH,0<BR>    AAM                  ;因为乘积最大为81,所以可采用BCD码乘法调整<BR>    MOV    DX,AX<BR>    MOV    AH,2<BR>    OR     DX,3030H<BR>    XCHG   DH,DL<BR>    CMP    DL,30H        ;这里加了个判断,用于判断10位是否为零,例如乘积为09,则打头的零就不用输出<BR>    JZ     NEXT1<BR>    INT    21H<BR>NEXT1:    <BR>    XCHG   DH,DL<BR>    INT    21H<BR>    MOV    DL,20H<BR>    INT    21H<BR>    ENDM<BR>DSEG    SEGMENT<BR>SEN     DB    ?,'*',?,'= $'        ;为输出乘式做准备,第一个问号处存放被乘数,第二个放乘数<BR>DSEG    ENDS<BR>CSEG    SEGMENT<BR>        ASSUME CS:CSEG,DS:DSEG<BR>MAIN:   MOV    AX,DSEG<BR>        MOV    DS,AX<BR>        MOV    BL,1                ;在控制行数的同时,控制乘数的最大值(1-9)<BR>NEXT:   MOV    BH,BL           <BR>        INC    BH                  ;这里的BH用于存放(BH)+1,用于控制被乘数的循环乘积<BR>        MOV    CL,1                ;CL存放被乘数,从1开始乘直到等于(BH)的值<BR>NEXT0:  MOV    AL,BL<BR>        MOV    AH,0<BR>        MUL    CL<BR>        PUSH   AX<BR>        MOV    AH,9<BR>        MOV    SEN,CL               ;在这里开始存放显示的乘数、被乘数<BR>        ADD    SEN,30H<BR>        MOV    SEN+2,BL<BR>        ADD    SEN+2,30H<BR>        LEA    DX,SEN<BR>        INT    21H                  ;输出乘式<BR>        POP    AX<BR>        SHOW                        ;显示乘积<BR>        INC    CL<BR>        CMP    CL,BH<BR>        JB     NEXT0<BR>        CR<BR>        INC    BL<BR>        CMP    BL,10<BR>        JB     NEXT<BR>        MOV    AX,4C00H<BR>        INT    21H<BR>CSEG    ENDS<BR>        END    MAIN<BR>相应的对比下简单的C语言例子:<BR>void main()<BR>{<BR> int i,j,m;<BR> for(i=1;i&lt;10;i++)<BR>    {<BR>     for(j=1;j&lt;i+1;j++)<BR>        {<BR>         m=i*j;<BR>         printf("%d*%d= %d ",j,i,m);<BR>         }<BR>     printf("\n");<BR>     }<BR> }</P>

流浪_汉 发表于 2007-1-21 00:39

<P>自己写的,就是没有上面的简单,可是比较容易看懂<BR>code segment<BR>main proc far<BR>    assume cs:code<BR>    push ds<BR>    mov ax,0<BR>    push ax<BR>    mov bl,1<BR> lop2:   mov bh,1<BR> lop1: mov al,bh<BR>      mul bl<BR>      aam                 //乘法调整指令<BR>      add bh,30h            //变为ASCII的值<BR>      add bl,30h<BR>      mov cx,ax<BR>      mov dl,bh            //显示被乘数<BR>      mov ah,2<BR>      int 21h<BR>      mov dl,'*'             //显示乘号<BR>      mov ah,2<BR>      int 21h<BR>      mov dl,bl            //显示乘数<BR>      mov ah,2<BR>      int 21h<BR>      mov dl,'='           //显示等号<BR>      mov ah,2<BR>      int 21h<BR>      cmp ch,0           //查看高位有没有值<BR>      je diwei<BR>      add ch,30h                //若有显示<BR>      mov dl,ch<BR>      mov ah,2<BR>      int 21h<BR>diwei:add cl,30h                //显示低位<BR>      mov dl,cl<BR>      mov ah,2<BR>      int 21h<BR>      mov dl,' '           //显示空格<BR>      mov ah,2<BR>      int 21h<BR>      sub bh,30h          //将ASCII还原为BCD数<BR>      sub bl,30h<BR>      inc bh             //将被乘数加一<BR>      cmp bh,bl         //比较看是不是要换行<BR>      jna lop1<BR>      mov dl,0ah             //换行与置首位<BR>      mov ah,2<BR>      int 21h<BR>      mov dl,0dh<BR>      mov ah,2<BR>      int 21h<BR>      inc bl<BR>      cmp bl,9             //比较是不是要结束<BR>      jna lop2<BR>      mov ah,4ch             //返回<BR>      int 21h<BR>      main endp<BR>      code ends<BR>         end main<BR></P>

bh342633854 发表于 2007-5-11 14:17

<P>我也来发一个 大家多多指教 是我自己写的 <BR>        .MODEL SMALL<BR>        .STACK<BR>        .DATA<BR>ET      DB 0DH,0AH,'$'<BR>TEMP    DB '?*?=??',' ','$'<BR>        .CODE<BR>        .startup<BR>    <BR>            MOV AL,31H<BR>            MOV BL,30H</P>
<P>CC:     PUSH AX<BR>        PUSH BX<BR>        INC BL<BR>        MOV [TEMP],BL<BR>        MOV [TEMP+2],AL<BR>        SUB AL,30H<BR>        SUB BL,30H<BR>        MUL BL<BR>        MOV BL,10<BR>        DIV BL<BR>        ADD AL,30H    <BR>        ADD AH,30H<BR>        CMP AL,31H<BR>        JL AA</P>
<P>        MOV [TEMP+4],AL<BR>        MOV [TEMP+5],AH<BR>        JMP BB</P>
<P>AA:     MOV AL,' '<BR>        MOV [TEMP+4],AH<BR>        MOV [TEMP+5],AL</P>
<P>BB:     MOV DX,OFFSET TEMP<BR>        MOV AH,09        <BR>        INT 21H<BR>        POP BX<BR>        POP AX<BR>        INC BX<BR>        CMP BL,AL    <BR>        JNE CC</P>
<P>        MOV BX,30H<BR>        PUSH AX<BR>        MOV DX,OFFSET ET<BR>        MOV AH,09<BR>        INT 21H<BR>        POP AX<BR>        INC AL<BR>        CMP AL,39H<BR>        JLE CC<BR>        <BR>        .EXIT 0<BR>        END<BR></P>

页: [1]

编程论坛