汇编:有符号10进制输入输出

本文详细介绍了汇编语言中实现有符号十进制整数的输入和输出方法,包括readsib、dispsib、readsiw和dispsiw等子程序的代码实现,适用于不同范围的有符号整数。

输入有符号十进制整数(-128~127)

readsib 输入有符号十进制整数(-128~127)出口:AL=8位数据

 	include io.inc
    .model small
    .stack
    .data
    .code
    .startup
    ;readsib 输入有符号十进制整数(-128~127)出口:AL=8位数据
    call readsib
    int 3
    .exit
    end

实现readsib

    .model small
    .stack
    .data
    .code
    .startup
    ;readsib 输入有符号十进制整数(-128~127)出口:AL=8位数据
    call readsib
    int 3
    .exit
readsib proc
    push bx
    push cx
    xor bx,bx   ;BX保存结果
    xor cx,cx   ;CX为正负标志,0为正,-1为负
    mov ah,1
    int 21h
    cmp al,'+'
    jz rsib1
    cmp al,'-'
    jnz rsib2
    mov cx,-1
rsib1: mov ah,1
    int 21h
rsib2:    cmp al,'0'
    jb rsib3
    cmp al,'9'
    ja rsib3
    sub al,30h
    shl bl,1
    mov bh,bl
    shl bl,1
    shl bl,1
    add bl,bh
    add bl,al
    jmp rsib1
rsib3:cmp cx,0
    jz rsib4
    neg bl ; 求补
rsib4:mov al,bl
    pop cx
    pop bx
    ret
readsib endp
    end

显示有符号十进制整数(-128~127)

dispsib 显示有符号十进制数据 入口:AL=8位数据

;include io.inc
    .model small
    .stack
    .data
    .code
    .startup
     ;dispsib 显示有符号十进制数据 入口:AL=8位数据
     mov al,0ffh
    call dispsib
    .exit
    end

实现dispsib

    .model small
    .stack
    .data
    .code
    .startup
     ;dispsib 显示有符号十进制数据 入口:AL=8位数据
     mov al,0ffh
    call dispsib
    .exit
dispsib proc
    push ax
    push bx
    push dx
    test al,al ;判断数据是零、正数或负数
    jnz dsib1
    mov dl,'0' ;是零,显示“0”后退出
    mov ah,2
    int 21h
    jmp dsib5
dsib1:jns dsib2  ;是负数,显示“-”
    mov bx,ax
    mov dl,'-'
    mov ah,2
    int 21h
    mov ax,bx
    neg al ;数据求补(绝对值)
dsib2:  mov bx,10
    push bx ;10压入堆栈,作为退出标志
dsib3:cmp al,0
    jz dsib4
    xor ah,ah ;扩展被除数ah.al
    div bl  
    add ah,30h  ;余数(0~9)转换为ASCII码
    mov dl,ah
    xor dh,dh
    push dx     ;数据各位先低位后高位压入堆栈
    jmp dsib3
dsib4:pop dx
    cmp dl,10
    je dsib5
    mov ah,2
    int 21h
    jmp dsib4
dsib5:pop dx
    pop bx
    pop ax
    ret
dispsib endp
    end

输入有符号十进制整数(-32768~32767)

readsiw 输入有符号十进制整数 (-32768~32767) 出口:AX=16位数据

	include io.inc
 	.model small
    .stack
    .data
    .code
    .startup
    ;readsiw 输入有符号十进制整数 (-32768~32767) 出口:AX=16位数据
    call readsiw
    int 3
    .exit
    end

实现readsiw

    .model small
    .stack
    .data
    .code
    .startup
    ;readsiw 输入有符号十进制整数 (-32768~32767) 出口:AX=16位数据
    call readsiw
    int 3
    .exit
readsiw proc
    push bx
    push cx
    push dx
    xor bx,bx   ;BX保存结果
    xor cx,cx   ;CX为正负标志,0为正,-1为负
    mov ah,1
    int 21h
    cmp al,'+'
    jz rsiw1
    cmp al,'-'
    jnz rsiw2
    mov cx,-1
rsiw1: mov ah,1
    int 21h
rsiw2:    cmp al,'0'
    jb rsiw3
    cmp al,'9'
    ja rsiw3
    sub al,30h
    xor ah,ah
    shl bx,1
    mov dx,bx
    shl bx,1
    shl bx,1
    add bx,dx
    add bx,ax
    jmp rsiw1
rsiw3:cmp cx,0
    jz rsiw4
    neg bx
rsiw4:mov ax,bx
    pop dx
    pop cx
    pop bx
    ret
readsiw endp
    end

显示有符号十进制整数(-32768~32767)

dispsiw 显示有符号十进制数据 入口:AX=16位数据

	include io.inc
    .model small
    .stack
    .data
    .code
    .startup
     ;dispsiw 显示有符号十进制数据 入口:AX=16位数据
     mov ax,0ffffh
    call dispsiw
    .exit
    end

实现dispsiw

    .model small
    .stack
    .data
    .code
    .startup
     ;dispsiw 显示有符号十进制数据 入口:AX=16位数据
     mov ax,0ffffh
    call dispsiw
    .exit
dispsiw proc
    push ax
    push bx
    push dx
    test ax,ax ;判断数据是零、正数或负数
    jnz dsiw1
    mov dl,'0' ;是零,显示“0”后退出
    mov ah,2
    int 21h
    jmp dsiw5
dsiw1:jns dsiw2  ;是负数,显示“-”
    mov bx,ax
    mov dl,'-'
    mov ah,2
    int 21h
    mov ax,bx
    neg ax ;数据求补(绝对值)
dsiw2:  mov bx,10
    push bx ;10压入堆栈,作为退出标志
dsiw3:cmp ax,0
    jz dsiw4
    xor dx,dx ;扩展被除数DX.AX
    div bx  
    add dl,30h  ;余数(0~9)转换为ASCII码
    push dx     ;数据各位先低位后高位压入堆栈
    jmp dsiw3
dsiw4:pop dx
    cmp dl,10
    je dsiw5
    mov ah,2
    int 21h
    jmp dsiw4
dsiw5:pop dx
    pop bx
    pop ax
    ret
dispsiw endp
    end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值