回 帖 发 新 帖 刷新版面

主题:[讨论]这个汇编题目该怎么做!

有一个题目:按5位十进制的形式显示寄存器BX仲的内容,如果BX的值小于0,则应在显示素质之前显示负号“-”。例如:(BX)=123,显示:00123;(BX)=-123,显示:-00123

怎么编写这个程序?

回复列表 (共2个回复)

沙发

title  getbx (com文件) 
.model tiny
.code
org 100h
;---------------------
main proc near

    mov  bx,-123

    mov  dx,0  ;装入
    mov  ax,bx ;被除数

    lea si,sss ;
    mov cx,1
    mov bx,10     ;装入除数
    test ax,08000h;判断符号位
    jz @10        ;是负数不?
    NEG ax        ;是,取相反数

        push ax
    mov ah,02h
    mov dl,45     ;显示符号先
    int 21h
    pop ax
@10:    
    cmp ax,10;小于10
    jb @20
    xor dx,dx    ;异或清0 ,等价;mov dx,0
    div bx       ;除以10后取余数
    or dl,030h   ;余数变成对应的 ASC2 码
    mov [si],dl  ;保存ASC2 码
    inc si
    inc cx
    jmp @10
@20:
    or al,030h
    mov [si],al
@30:
        mov ah,02h  ;反向逐个
    mov dl,[si] ;显示被保存的ASC2 码
    int 21h
    dec si
    loop @30
.exit
sss db  5 dup(?)
main endp
end main

;我是初学者,代码不好看,间谅
;masm 6.11下通过编译

板凳

多谢~~~~~~~~~~~~~·

我来回复

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