汇编语言(王爽第三版)实验十 怎么做的,我做得结果和正确答案有偏差,望指点迷津
这道避免32位除法溢出的实验我做出来的结果与书上答案有偏差,正确的应该是ax=86a0,我做的在下面那个图哪儿。源代码如下:assumecs:code,ds:datada...
这道避免32位除法溢出的实验我做出来的结果与书上答案有偏差,正确的应该是ax=86a0,我做的在下面那个图哪儿。源代码如下:assume cs:code,ds:datadata segment dw 12 dup(0)data endscode segmentstart: mov ax,data mov ss,ax mov sp,17h mov si,0 mov ax,4240h mov dx,000fh mov cx,0ah call divdw mov ax,4c00h int 21hdivdw: mov bx,ax ;暂时保存低16位 mov ax,dx ;高16位赋给ax sub dx,dx div cx mov si,dx ;高16位除以除数的余数 mov di,512 mul di mov di ,128 mul di push dx ;暂时将高位结果暂放在栈中 push ax ;暂时将低位结果放在栈中 mov ax,si ;将余数赋给ax mov si,512 mul si mov si,128 add ax,bx ;加上低16位 div cx mov cx,dx ;保留余数 sub bx,bx pop bx ;将 低位结果放在bx中 pop dx ;将高位结果放在dx中 add ax,bx ret code ends end start 实验10-3我也遇到了问题,写好了编译通过,可是运行的时候不显示结果,像卡住了一样。 实验要求如下:在屏幕中显示12666这个数。我写的代码如下: assume cs:code,ss:stackdata segment db 5 dup(0)data endsstack segmentdw 100 dup(0)stack endscode segment start: mov ax,stack mov ss,ax ;设置好栈参数 mov sp,200 mov ax,12666 mov bx,data ;设置数据段参数 mov ds,bx mov si,0 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_strdtoc:push bx push cx push ax mov bx,10done: sub dx,dx div bx mov cx,dx jcxz ok add cx,30h ;将低位转化为对应ascii码 push cx ;将转化后的结果压入栈中 jmp short done mov cx,5 ok: pop ax mov [si],al inc si loop ok mov bx,0 mov [si+1],bx pop ax pop cx pop bx ret show_str: push dx push ax push cx push es push bx mov ax,0B800H mov es,ax sub ax,ax mov al,160 mul dh ;设置好行 sub dh,dh add dl,dl add ax,dl sub dx,dx mov di,ax sub ax,ax mov al,cl sub cx,cx work: mov ch,0 mov cl,[si] jcxz ok1 mov es:[di],cl mov es:[di+1],al inc si add di,2 jmp short workok1: pop bx pop es pop cx pop ax pop dx ret code ends end start
展开
1个回答
展开全部
;显示 123, 12666, 1, 8, 3, 38 的程序如下:
CCC SEGMENT
DW 123, 12666, 1, 8, 3, 38
BG:
PUSH CS
POP DS
;-----------------------
MOV SI, 0
MOV DI, 0506H ;显示屏的偏移地址
MOV CX, 6 ;6个数据
@@: PUSH CX
CALL DTOC ;调用函数,将整型转化为字符串,在显示屏显示
ADD SI, 2
ADD DI, 2 ;DI指向下一个显示的位置
POP CX
LOOP @B
MOV AH, 4CH
INT 21H
;-----------------------------------
DTOC:
MOV AX, [SI]
MOV BX, 10
MOV CX, 0
@@: SUB DX, DX ;DX清零
DIV BX
PUSH DX
INC CX
CMP AX, 0
JNZ @B
MOV AH, 2
@@: POP DX
CALL SHOW_STR ;每求的一个余数就调用显示函数
LOOP @B
RET
;-----------------------------------
SHOW_STR: ;显示每个数据除10后的余数功能
MOV BX, 0B800H
MOV ES, BX
ADD DX, 4A30H ;余数转化为ASCII码进行显示
MOV ES:[DI], DX
ADD DI, 2 ;DI指向下一个显示的位置
RET
;-----------------------------------
CCC ENDS
END BG
华芯测试
2024-09-01 广告
2024-09-01 广告
电学测试台是深圳市华芯测试科技有限公司的核心设备之一,它集成了高精度测量仪器与自动化控制系统,专为半导体芯片、电子元件及模块的电性能检测而设计。该测试台能够迅速、准确地完成电压、电流、电阻、电容及频率等关键参数的测试,确保产品质量符合行业标...
点击进入详情页
本回答由华芯测试提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询