javanetwork 发表于 2011-8-16 23:22:34

实验十 终于独立完成,对小甲鱼的答案有点疑惑

本帖最后由 javanetwork 于 2011-8-17 13:27 编辑


assume cs:myc,ds:mydat
mydat segment
db 128 dup(0)
dw 123,12666,41,8,3,38
mydat ends

mystack segment
dw 8 dup(0)
mystack ends
myc segment
start:
mov ax,mystack
mov ss,ax
mov sp,10H
mov ax,mydat
mov ds,ax


mov si,128
mov di,si

mov cx,6
call getword


mov ax,4c00H;程序出口
int 21h

getword:
;从ds:处获取字型整数,输出到屏幕
;参数:cx为欲获取的数据的个数
push cx
push si
push di

mov al,ds:
mov ah,ds:

call wtoa


push ax
push dx
mov dl,12;设置相同的行和列,前一个字符串被覆盖
mov cl,01101101B
mov ax,mydat
mov ds,ax
mov si,di
call show_str
pop dx
pop ax



pop di
pop si
add si,2
pop cx
loop getword


ret



wtoa:
;将字型整数以十进制输出;调用divw,不断divw 10取余
;参数:ax存放整数
;结果:字符串在ds:这个内存地址前面

sub di,1
mov cl,0
mov ds:,cl;置字符串尾为\0
rea:
mov cx,ax
jcxz zero;如果ax已经为零了,返回
mov cl,10
call divw
add cl,48;数字转换成字符
dec di
mov byte ptr ds:,cl;从后往前
loop rea


zero:

ret









divw:
;进行不会溢出的除法运算 16位除8位
;参数:ax被除数,cl除数
;返回:al结果的低8位,ah结果的高8位,cl余数
;如0973H除2
;ahalclch
;09730273
;00090273
;0104   0273
;   dl
;01730273
;01B90273
;01B90173
;ex:
;mov ax,9473H
;mov cl,14H
;call divw
mov ch,al ;暂时保存al的值
mov al,ah
mov ah,0
div cl;00dx /cx 0009/2
mov dl,al;保存低8位的结果
mov al,ch;恢复al的值
div cl;173/2
mov cl,ah
mov ah,dl
ret











   
show_str:;显示字符串
;参数:dl行0~24dh列0~79cl颜色ds:字符串的首地址
;应用示例:
;mov dl,12
;mov dh,40
;mov cl,01101101B
;mov ax,mydat
;mov ds,ax
;mov si,0
;call show_str
mov bx,0B800H
mov es,bx

mov ax,0A0H
mul dl
mov bx,ax
mov ax,02H
mul dh
add bx,ax
mov dl,cl
cir:

mov ch,0
mov cl,ds:
jcxz ou
mov es:,cl
mov es:,dl
inc si
add bx,2
jmp short cir
ou:
ret







divdw:
;进行不会溢出的除法运算,32位除16位
;参数:ax为低16位,dx为高16位,cx除数
;返回:ax结果的低16位,dx结果的高16位,cx余数
;如0973H除2
;dxaxcxbx
;09730273
;00090273
;0104   0273
;push ax
;01730273
;01B90273
;01B90173
;应用示例:
;mov ax,9473H
;mov dx,0187H
;mov cx,3142H
;call divdw
mov bx,ax ;暂时保存ax的值
mov ax,dx
mov dx,0
div cx;00dx /cx 0009/2
push ax;保存低16位的结果
mov ax,bx;恢复ax的值
div cx;173/2
mov cx,dx
pop dx
ret

myc ends;结束段
end start;结束程序,同时告诉编译器,程序入口的标号是start   

javanetwork 发表于 2011-8-17 03:26:45

小甲鱼视频里面 实验十第三个子程序有没有问题?
余数保存他用push dx
但是show_str处理的是字节型数据,且遇到零就终止了
还有里面用div指令,没有防止数据溢出
题目要求转换好几个数据,他直接取了一个,偷工减料啊

以上个人看法,欢迎指正。

□_□ 发表于 2011-8-17 07:32:44

大家交流交流!:lol

583413088 发表于 2011-8-17 13:56:39

我来学习下啊
页: [1]
查看完整版本: 实验十 终于独立完成,对小甲鱼的答案有点疑惑