汇编语言(王爽第三版)实验十 怎么做的,我做得结果和正确答案有偏差,望指点迷津

这道避免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 展开
 我来答
做而论道
高能答主

2017-05-05 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部

;显示 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 广告
电学测试台是深圳市华芯测试科技有限公司的核心设备之一,它集成了高精度测量仪器与自动化控制系统,专为半导体芯片、电子元件及模块的电性能检测而设计。该测试台能够迅速、准确地完成电压、电流、电阻、电容及频率等关键参数的测试,确保产品质量符合行业标... 点击进入详情页
本回答由华芯测试提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式