设内存 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