小甲鱼入门学习汇编第八章div后的数字输出问题
本帖最后由 444lzx 于 2018-6-16 23:26 编辑在小甲鱼第八章视频中,讲到用div指令计算100001除以100,商存在ax中,debug查看其结果是03e8。现在我想用dos的2号指令将这个结果以十进制形式输出,该怎么做呢?
前面的代码大概是这样的:
data segment
dd 100001
dw 100
dw 0
data ends
assume cs:code,ds:data
code segment
start:
mov ax,data
mov ds,ax
mov ax,ds:
mov dx,ds:
div word ptr ds:
code ends
end start 本帖最后由 人造人 于 2018-6-17 11:02 编辑
偷个懒,用C语言写个转换函数 ^_^
assume cs:code, ds:data, ss:stack
; void far NumberToString(char *buf, int value, char str_end_flag)
extrn _NumberToString:far
stack segment
db 1024 dup(?)
stack ends
data segment
buf:
db 1024 dup(?)
data ends
code segment
start:
mov ax, stack
mov ss, ax
mov sp, 1024
mov ax, data
mov ds, ax
mov ax, '
需要用 tc 编译 Funs.c
static void Swap(char *a, char *b)
{
char t = *a;
*a = *b;
*b = t;
}
void far NumberToString(char *buf, int value, char str_end_flag)
{
int i = 0;
int j;
int max;
int rem;
while(value != 0)
{
rem = value % 10;
value /= 10;
buf = rem + '0';
}
/* 字符串结束标志,dos 比较奇怪,不使用 '\0',使用 '
; 字符串结束标志
push ax
mov ax, 123
push ax
mov ax, buf
push ax
call _NumberToString
add sp, 6
; DS:DX=待输出字符的地址
mov ah, 09h
mov dx, buf
int 21h
mov ax, 4c00h
int 21h
code ends
end start
需要用 tc 编译 Funs.c
[ DISCUZ_CODE_1 ]
表示字符串结束 */
buf = str_end_flag;
--i; /* 指向最后一个字符 */
max = i / 2;
for(j = 0; j <= max; ++j)
{
Swap(&buf, &buf);
--i;
}
}
; 字符串结束标志
push ax
mov ax, 123
push ax
mov ax, buf
push ax
call _NumberToString
add sp, 6
; DS:DX=待输出字符的地址
mov ah, 09h
mov dx, buf
int 21h
mov ax, 4c00h
int 21h
code ends
end start
需要用 tc 编译 Funs.c
[ DISCUZ_CODE_1 ]
忘了截图 ^_^
发现 bug
@小甲鱼
这4个文件
人造人 发表于 2018-6-17 07:46
偷个懒,用C语言写个转换函数 ^_^
请问你这是在汇编里面写了c函数,然后结果保存在字符串中输出吗???
那结果的进制转换做了吗?
rem = value % 10;
value /= 10;
buf = rem + '0';
如果这是进制转换的话,为什么二进制转十进制要除以十取余呢?
还有rem应该是int型数据,可以跟字符‘0’相加吗??
麻烦了 444lzx 发表于 2018-6-17 13:15
请问你这是在汇编里面写了c函数,然后结果保存在字符串中输出吗???
那结果的进制转换做了吗?
rem = ...
这个程序是C语言和汇编语言混合编程,由汇编语言调用C语言写的函数
什么是二进制?什么是十进制?什么是十六进制?
数字在内存中就只是一个数字,看你的需求,你可以认为这个数字是十六进制(基数是16),也可以认为是十进制(基数是10),或是二进制(基数是2)
请自己复习进制转换部分
字符在内存中就是一个数字
如果是数字 3 想要显示,那就需要把数字 3 转换成字符 '3'
字符 '0' 是 0x30
字符 '3' 是 0x33
3 + 0x30 = 0x33
数字 3 加字符 '0' 等于字符 '3'
你需要下载这几个文件,上面的排版出 bug 了 人造人 发表于 2018-6-17 13:35
你需要下载这几个文件,上面的排版出 bug 了
好的谢谢
页:
[1]