汇编问题,算术运算与代码转换

设内存 SDASC 单元开始存放若干个带符号的十进制整数的 ASCII 码串, 串间用逗号分隔, 最 后以回车符结束, 编制程序将其转换为补码表示的二进制数存入 BIN 开始的单元, 设数据为 - 32768 ~ 32767 之间的数。

您好,根据您的需求,汇编问题,算术运算与代码转换,设内存 SDASC 单元开始存放若干个带符号的十进制整数的 ASCII 码串, 串间用逗号分隔, 最 后以回车符结束, 编制程序将其转换为补码表示的二进制数存入 BIN 开始的单元, 设数据为 - 32768 ~ 32767 之间的数。这段代码可以写成如下样子。

DATA SEGMENT
sdasc DB "-32768,-32767,32766,32767", 0   ; 带符号的十进制整数的ASCII码串
bin DW 0                                   ; 存储转换后的补码表示的二进制数
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

START:
    MOV AX, DATA
    MOV DS, AX                             ; 将DS寄存器设置为数据段的段地址

    LEA SI, sdasc                          ; 通过LEA指令将SDASC的偏移地址加载到SI寄存器
    MOV DI, bin                            ; 将BIN的偏移地址加载到DI寄存器
    MOV CX, 4                              ; 假设有4个数字需要转换

CONVERT_LOOP:
    CALL CONVERT_DEC_TO_BIN                ; 调用转换函数进行转换
    ADD SI, 8                              ; 移动到下一个数字的ASCII码串
    ADD DI, 2                              ; 移动到下一个存储位置
    LOOP CONVERT_LOOP

    ; 在这里可以添加其他的处理代码

    MOV AX, 4C00H                          ; 程序退出
    INT 21H

CONVERT_DEC_TO_BIN:
    MOV AL, [SI+1]                         ; 读取数字的符号位
    CMP AL, '-'                           ; 检查符号位是否为负数
    JNE POSITIVE

    ; 处理负数
    MOV AL, [SI+2]                         ; 读取数字的十位
    SUB AL, 30H                            ; 将ASCII码转换为数值
    NEG AL                                 ; 取反
    ADD AL, 1                              ; 加1
    MOV [DI], AL                           ; 存储转换后的补码表示的二进制数
    MOV AL, [SI+3]                         ; 读取数字的个位
    SUB AL, 30H                            ; 将ASCII码转换为数值
    ADD [DI], AL                           ; 补充转换后的补码表示的二进制数的低字节
    MOV AL, [SI+4]                         ; 读取逗号或回车符
    JMP END_CONVERT

POSITIVE:
    ; 处理正数
    MOV AL, [SI+1]                         ; 读取数字的十位
    SUB AL, 30H                            ; 将ASCII码转换为数值
    MOV [DI], AL                           ; 存储转换后的补码表示的二进制数
    MOV AL, [SI+2]                         ; 读取数字的个位
    SUB AL, 30H                            ; 将ASCII码转换为数值
    ADD [DI], AL                           ; 补充转换后的补码表示的二进制数的低字节
    MOV AL, [SI+3]                         ; 读取逗号或回车符

END