下面的是我们的汇编题目,麻烦帮忙给一下做法。

1个回答

  • 八、填空题。

    1.假设(SS)=3000H,(SP)=1008H;如果在堆栈中存入3个数据,则栈顶的物理地址为_31002_H; 如果又从堆栈中取出5个数据, 则栈顶的物理地址为_3100C_H;再从堆栈中取出4个数据,则栈顶的物理地址为_31014_H;如果又在堆栈中存入6个数据,则栈顶的物理地址为_31008_H。

    2.字符“0” 加5后的字符是_“5”_;字符“a” 减20H后的字符是_“A”_。

    答案:第1空:"5",第2空:"A" 。

    做法:1,出入栈每个数据以字(2bytes)为单位,入栈向低地址伸展,即入栈sp-n*2,出栈为sp+n*2,物理地址SS*10H+SP

    2,常识小写字母ASCII码值比大写字母大20H,数字的ASCII码值低四位为数字,高四位相同

    九、根据下列各题的要求,编制程序。

    1.用移位、传送和加法指令完成(AH)*9的计算。(设积不会溢出)

    小学算法:a*9=a*8+a:移位可实现2,4,8倍或1/2,1/4,1/8

    mov al,ah-->mov cl,4 -->shl ah,cl--->add ah,al

    2.设I、J、K为无(有)符号字节(字)变量,将J、K中大(小)的存入I中。

    mov ax,J-->mov bx,K-->cmp ax,bx

    ja axGreater 无符号数比较,ax大直跳

    mov ax,bx 否则,将较大的bx移入ax,保证ax始终最大

    axGreater:

    mov I,ax

    >>>>>>>>>

    mov ax,J-->mov bx,K-->cmp ax,bx

    jl axLower 有符号数比较,ax小直跳

    mov ax,bx 否则,将较小的bx移入ax,保证ax始终最小

    axLower:

    mov I,ax

    3.设X、Y、Z均为有符号的字变量,计算(678+X*9)/234, 并将商存入Y中、余数存入Z中。

    mov ax,X-->mov bx,9-->mul bx-->add ax,678-->adc dx,0-->mov bx,234-->div bx

    mov Y,ax-->mov Z,dx

    5.数据段D中有 M DB ‘HOW DO YOU DO?’,0DH,0AH,‘$’ ,显示此字符串。

    mov dx,offset M

    mov ah,9

    int 21h

    6.将键盘输入的大(小)写字母用小(大)写字母显示出来,若输入的不是大(小)写字母,则返回。

    不带回显键盘输入功能号-->ah

    main proc

    start:

    int 21h

    cmp al,41h

    jb exit ;z

    cmp al,5Ah

    jna uppercase

    cmp al,61h

    jnb lowercase

    exit:

    ret

    uppercase:

    add al,20h

    jmp showch

    lowercase:

    sub al,20h

    showch:

    mov dl,al

    ret

    main endp

    end start

    8.将DL中的低四位二进制数以十六进制数形式显示出来。

    mov cl,4-->shl dl,cl-->shr dl,cl

    cmp dl,10h

    jnb decimalnum

    sub dl,10h

    add dl,'A'

    jmp showit

    decimalnum:

    add dl,30h

    showit:

    显示字符功能号-->ah

    int 21h

    B.测试8EH中0的位数。

    mov al,8Eh

    mov cx,8

    xor bl,bl

    bittest:

    shl al,1

    jc continue

    inc bl

    continue:

    loop bittest

    0的位数在bl中

    C.测试8EH中1的位数。

    mov al,8Eh

    mov cx,8

    xor bl,bl

    bittest:

    shl al,1

    jnc continue

    inc bl

    continue:

    loop bittest

    1的位数在bl中

    D.计算305*3,程序段执行后,DX=________ ,AX=________ 。

    305>256,在ax中,mul后为dx:ax,明显不超过ax表示范围,即dx=0,ax=915

    E.计算41*3,程序段执行后,AX=_123D_ 。

    F.计算0F2/3,程序段执行后,AX=________ 。

    ax=f2,bl=3,mul bl==>al=商,ah=余

    需分有符号数与无符号数除法分析

    G.计算62/3,程序段执行后,AH=________ ,AL=________ 。

    同上

    H.统计正(负/奇/偶)数的个数。

    n位Reg或Men表示个数为:

    正:有符号--》2^(n-1)-1;无符号2^n

    负: 2^(n-1)

    奇数、偶数:2^(n-1)