回 帖 发 新 帖 刷新版面

主题:请问应该如何输出这道题中ax的结果

请问应该如何输出这道题中ax的结果
DATA SEGMENT
BUF  DW 22H,33H,44H
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
       MOV DS,AX
       MOV AX,BUF
       MOV BX,BUF+2
       MOV CX,BUF+4
       CMP AX,BX
       JB  L1
       CMP AX,CX
       JB  L2
L1:   MOV AX,BX
L2:   MOV AX,CX
       MOV AH,4CH
       INT 21H
CODE ENDS
     END START

回复列表 (共3个回复)

沙发

;我提供一个过程,可以以指定的进制形式输出机器数
print    proc ;提供多种进制的输出
        ;ax 存放要转换的数
    ;cx 存放进制形式 (2 <= 进制 <= 35)
    cmp    cx, 2    
    jl    _error_
    cmp    cx, 35
    ja    _error_
    push    bx    ;保存 bx
    push    dx    ;...
    sub    sp, 16    ;16 (2 * 8)个字节的临时变量
    mov    bx, sp  ;bx 指向变量地址
    xor    dx, dx
_loop:
    cmp    ax, 0
    jne    _next
    cmp    dx, 0
    je    _print
_next:
    div    cx
    cmp    dx, 9        ;比较余数是否大于 9
    ja    _than_nine
    add    dl, '0'
    jmp    _save_dl
_than_nine:
    add    dl, 'A' - 0AH    ;大于 9 的数转换处理
_save_dl:
    mov    ss:[bx], dl
    inc    bx
    cwd
    jmp    _loop
_print:
    dec    bx
_print_next:
    cmp    bx, sp
    jl    _end
    mov    dl, ss:[bx]
    mov    ah, 2
    int    21H
    dec    bx
    jmp    _print_next
_error_:
    xor    ax, ax    ;return false
    ret
_end:
    add    sp, 16    ;恢复堆栈
    pop    dx
    pop    bx
    
    mov    ax, 1    ;return true
    ret
print    endp        

板凳

DATA  SEGMENT
         BUF  DW        22H,33H,44H
        DATA  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA
      START:  MOV       AX,DATA
              MOV       DS,AX
              MOV       AX,BUF
              MOV       BX,BUF+2
              MOV       CX,BUF+4
              CMP       AX,BX
              JB        L1
              CMP       AX,CX
              JB        L2
         L1:  MOV       AX,BX
              CALL      DISPALL
              CALL      NEWLINE
         L2:  MOV       AX,CX
              CALL      DISPALL
         OK:
              MOV       AH,4CH
              INT       21H

     DISPALL  PROC                  ;显示十六进制的子程序
              PUSH      DX
              PUSH      CX
              PUSH      BX
              MOV       CL,12
              MOV       BX,AX
   DISPALL0:
              MOV       AX,BX
              SHR       AX,CL
              AND       AL,0FH
              CMP       AL,9
              JA        DISPALL1
              ADD       AL,30H
              PUSH      AX
              POP       DX
              CALL      ECHOCH
              JMP       DISPALL2
   DISPALL1:
              ADD       AL,37H
              PUSH      AX
              POP       DX
              CALL      ECHOCH
   DISPALL2:
              SUB       CL,4
              CMP       CL,0
              JNL       DISPALL0
              POP       BX
              POP       CX
              POP       DX
              RET
     DISPALL  ENDP

     NEWLINE  PROC                  ;回车换行子程序
              PUSH      AX
              PUSH      DX
              MOV       DL,0DH
              MOV       AH,2
              INT       21H
              MOV       DL,0AH
              MOV       AH,2
              INT       21H
              POP       DX
              POP       AX
              RET
     NEWLINE  ENDP
      ECHOCH  PROC                  ;2号子程序
              MOV       AH,2
              INT       21H
              RET
      ECHOCH  ENDP


        CODE  ENDS
              END       START

3 楼

按你的意思只输出了两个,不过我想你是不是弄错了,因为你肯定是想把这三个数按照一定的大小输出的,自己再改一改吧:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册