+ -
当前位置:首页 → 问答吧 → [修改程序]把5位十进制的形式显示寄存器BX中的内容

[修改程序]把5位十进制的形式显示寄存器BX中的内容

时间:2010-11-27

来源:互联网

Assembly code
;子程序的功能:把寄存器BX的内容按十进制有符号数显示出来
;入口参数:BX
;出口参数:无,只有显示信息
;算法描述:(1)定义6个字节的存储单元 
;(2)先判断BX是否小于零,如果是,则先显示负号'-',再取BX的绝对值;
;(3)采用除10得余数的方法,从低位向高位求出每位十进制位;
;(4)输出数据的字符串。

SubData SEGMENT
        DB 5 DUP('0'),0ah,0dh,'$'    ;0ah、0dh:换行、回车
SubData ENDS
DISPBX  PROC
        ASSUME DS:SubData
        PUSH DS
        PUSH DX
        PUSH CX
        PUSH AX
        MOV AX,SubData     ;取子程序所用的数据区段地址
        MOV DS,AX
        CMP BX,0
        JGE next
        MOV DL,'-'
        MOV AH,2
        INT 21H            ;显示负号'-'
        NEG BX             ;求-(BX),使其值为正数
next:   MOV SI,4
        MOV AX,BX
        MOV CX,10D
again:  XOR DX,DX
        IDIV CX            ;DX存放余数,AX存放商
        ADD DL,'0'
        MOV [SI],DL
        DEC SI
        JGE again
        XOR DX,DX
        MOV AH,9
        INT 21H            ;调用中断21的功能9,显示DS:DX指向的字符串
        POP AX
        POP CX
        POP DX
        POP DS
        RET
DISPBX  ENDP


这段程序我是按照书上打的,可是不明白为什么出现以下错误?
must be in segment block:DISPBX
谷歌了按照改了格式也不行?

作者: kartik   发布时间: 2010-11-27

都没CS段,你搞甚涅???!!!

作者: nanlingcg   发布时间: 2010-11-27

编译器已经提示啦:must be in segment block。有 没有CS段的程序吗??

作者: masmaster   发布时间: 2010-11-27