Questions tagged [assembly]

Assembly languages in general, of any architecture. Use with the particular processor’s tag as appropriate.

Filter by
Sorted by
Tagged with
89
votes
8answers
27k views

Why would a NES game use an undocumented 1-byte or 2-byte NOP in production?

Reading the NESdev wiki page on CPU unofficial opcodes, I see a few games use an undocumented 2-byte NOP instuction in production: Puzznic, F-117A Stealth Fighter, and Infiltrator use $89 #i. Beauty ...
69
votes
9answers
10k views

Why is the processor instruction called “move”, not “copy”?

Many processors have an instruction called "move" (sometimes spelled MOV) which copies data from one location (the "source") to another (the "destination") in registers and/or memory. It does not do ...
61
votes
13answers
15k views

Were later MS-DOS versions still implemented in x86 assembly?

Recently, Microsoft published the source code of old MS-DOS versions on GitHub. What is odd in my opinion is the use of x86 assembly language for everything. The assembly language would not be my ...
61
votes
3answers
12k views

Why did DOS use dollar-terminated strings?

According to a few tutorials I am seeing, DOS used dollar-terminated strings to write to the terminal. This seems to also be documented here on INT 21H. AH = 09h - WRITE STRING TO STANDARD OUTPUT ...
56
votes
7answers
9k views

Why did the MS-DOS API choose software interrupts for its interface?

Access to the DOS API was done through the INT 21h x86 instruction. This was always counter-intuitive to me, coming from 8-bit systems that accessed system services by calling subroutines through a ...
54
votes
7answers
7k views

Are there any modern compilers that can generate Amiga/m68k executables?

I would quite like to resurrect my openkick project. As I note on that project's README.md, it is stalled because GNU GCC is not fit for purpose. Sadly, there do not seem to be any other modern ...
53
votes
7answers
12k views

Why use static RAM addresses instead of the stack?

I'm studying the 65c816 assembly for the 1994 game, Super Metroid. A hobbyist studied the game in-depth and created a RAM map. From it: 7E:0B56 - 7E:0B57 Moves Samus this distance horizontally, ...
52
votes
12answers
12k views

How was the first assembler for a new home computer platform written?

How did the 8-bit computers (Spectrum, Commodore, Atari, Amstrad etc) typically "bootstrap" from bare electronics into a platform with a working assembly language and OS? What I mean: An assembler is ...
45
votes
2answers
5k views

What computer system is this from 1984 Doctor Who?

In the 1980s, the popular BBC science fiction series Doctor Who used some real computer system(s) to display impressive (for the time, OK, maybe not!) graphics. They actually ran the software real-...
34
votes
14answers
8k views

What “unusual” syntax assembly languages are/were there?

This question may have the apparent form of a question soliciting a "list" answer, but I'm expecting the list to be very short, so please bear with me. What "unusual" syntax assembly languages are/...
34
votes
4answers
15k views

Who is credited for the creation of Assembly Language?

The C Programming Language was originally developed by Dennis Ritchie who also co-designed the Unix operating system with which development of the language was closely intertwined. Is there a ...
34
votes
8answers
8k views

When and why did high-level language compilers start targeting assembly language rather than machine code?

From what I've read, the first FORTRAN compiler built a machine-code program entirely in memory; it was, in fact, designed to read the entire source code of the program, and then sequentially load ...
33
votes
6answers
11k views

Which was the first programming language that had data types?

Machine language (and Assembly language) don't have the concept of data types, so if you want to add an int and a float variables in Assembly, you have to use the appropriate Assembly instruction that ...
33
votes
3answers
5k views

Why are first four x86 GPRs named in such unintuitive order?

On x86 the first four general-purpose registers are named AX, CX, DX, BX. It would be quite intuitive if their indices (those used in instruction encoding) were in alphabetical order, but instead of ...
29
votes
9answers
10k views

How did early x86 BIOS programmers manage to program full blown TUIs given very few bytes of ROM/EPROM?

I've always wondered how so much functionality and relative luxuries(CMOS Configuration Utilities. See: https://geekprank.com/bios/ for an example) included with most popular x86 BIOSes could be ...
24
votes
5answers
2k views

How much benefit should be expected on a more advanced compiler for z80/r800 based computers?

I am self studying about compilers, and get hands on very good textbooks about the subject. I am thinking in develop a compiler using the almighty llvm infrastructure to cross compile to old computers,...
23
votes
12answers
7k views

Was memory corruption a common problem in large programs written in assembly language?

Memory corruption bugs have always been a common problem in large C programs and projects. It was a problem in 4.3BSD back then, and it's still a problem today. No matter how carefully the program is ...
22
votes
2answers
3k views

Why didn't the 6502 have increase/decrease opcodes for A?

In 6502 Assembly, we can use INX and INY to increase the value stored in X and Y. They can be decreased with DEX and DEY. However, it seems that there are no such instructions for A, like INA or DEA. ...
21
votes
5answers
8k views

Will PC-DOS run faster on 4 or 8 core modern machines?

When I run PC-DOS on my 4 core AMD Phenom chip, does it take advantage of the extra parallel CPU's? If not, is there a way to coax DOS to use all available CPU's or does this require specific ...
21
votes
3answers
2k views

Why use repeated STZ instructions with the same operand on the 65C816 for the SNES (Super Nintendo)?

Please consider the code in Super NES Programming/Initialization Tutorial/Snes Init. Here is an excerpt: stz $2113 ; Plane 3 scroll x (first 8 bits) stz $2113 ; Plane 3 scroll x (last ...
21
votes
1answer
1k views

When did the IBM 650 have a “Table lookup on Equal” instruction?

In 1959, Donald Knuth wrote an assembly program named SuperSoap for the IBM 650. Here is the manual, and here is a listing of the program (in SuperSoap assembly language). Quoting from the abstract: ...
21
votes
2answers
1k views

What are these tiny TSRs doing?

I've been puzzled by this for a while now. The (very old) game Phantasie comes with three small TSRs that are run prior to running the main game executable. This is the content of the file PH.BAT, ...
19
votes
12answers
5k views

Did early assembly games use hardcoded memory locations?

In the era of C64, Apple][ GS, and SNES, did the games use hardcoded memory locations, or did they let the assembler help them (like modern assemblers)? If yes, how did they manage the memory?
19
votes
4answers
3k views

Why are branches relative in many 8-bit CPUs?

I was looking over an old article on the 6809 and was perusing the opcodes and noticed that the branch instructions came in two flavors, long and short. That sparked a memory about one of the 6502-...
19
votes
3answers
4k views

What makes MOVEQ quicker than a normal MOVE in 68000 assembly?

I'm "re-learning" 68000 assembly language and came across the "MOVEQ" command that is labeled "MOVE QUICK". According to the NXP Programmers Reference Manual (reference below), the command MOVEQ (...
17
votes
6answers
6k views

How slow was the 6502 BASIC compared to Assembly

Imagine a modern computer, where let's say Python is a high level programming language and needs to be interpreted in order to execute a piece of code. You could write some code in C, compile it, ...
17
votes
3answers
3k views

Was there any automated unit testing prior to 1972?

Prior to 1972, was there any automated unit-testing? Did any assemblers include a testing a framework? I can find some academic journals on this topic from the late 70s -- most of which I don't have ...
17
votes
2answers
2k views

Meaning of $ and $$ in Modcomp assembly language

The Modcomp II was a 16-bit minicomputer circa 1970. As well as in FORTRAN IV, the Modcomp family could be programmed in assembly language, with syntax like this excerpt from Kermit for Modcomp: ...
16
votes
12answers
7k views

How can a Z80 assembly program find out its own memory address?

I'm wondering how to write a program in Z80 assembler that discovers its own memory location. I thought that maybe I could somehow load the program counter PC into, for example, BC. Is there a way ...
16
votes
2answers
5k views

What does “jmp *” mean in 6502 assembly?

Right now I am learning 6502 assembly. Currently I am using the MADS assembler to program for the Atari 800. This program is just a small tutorial program that came with the assembler zip file I ...
16
votes
4answers
1k views

Toolchain and workflow to build CP/M

Building my own version of CP/M has always been a fascinating to-do project. Problem is that it seems that the source code is not in regular assembler, but some kind of macro-assembler like language ...
16
votes
1answer
513 views

Where and when did the “.s” suffix for assembly-language source files originate?

The closest I was able to find on StackOverflow is What are .S files?, in which no answerer addresses why we use .s for assembly. (And .S for preprocessor/macro assembly; and gcc -S to produce ...
15
votes
8answers
6k views

Uses for the halt instruction?

What was the halt instruction in early CPUs such as the Z80 and 8080 used for? Here's a description of the Z80 instruction: The HALT instruction suspends CPU operation until a interrupt or reset ...
15
votes
1answer
634 views

Why does AT&T syntax use * and $?

In a comment to an answer about AT&T assembly syntax, another-dave asked the following: DEC used #foo for an immediate operand in -11 assemblers; the Unix guys apparently preferred $foo, which ...
15
votes
1answer
4k views

How to write directly to video memory in MS-DOS?

The base address for the video memory in MS-DOS is 0xB8000. I am trying to write to this address using debug.exe, but I am getting an error: 1165:0103 mov [b8000],ax ^ Error
14
votes
2answers
1k views

How could high level functions with return values map to 6502 assembly? (if at all possible)

What sort of code could be used to substitute a high level function with a return value to a 6502 subroutine? Take this C-like function for example. byte func(byte a, byte b, byte c) { d = (a + b)...
14
votes
5answers
4k views

Was Family BASIC for the NES/Famicom powerful enough to create full games and applications?

"Family BASIC or Famicom BASIC is the consumer product for programming Nintendo's Family Computer video game console of Japan." wikipedia I can't seem to find much info about Family BASIC ...
14
votes
3answers
6k views

MSX Assembly/Basic programming documentation

I'd like to try to create software (and maybe simple games) for the MSX standard. I know I have two ways to do so, either I use MSX Basic or Z80 assembly. I think that Z80 assembly is more powerful ...
14
votes
1answer
515 views

SYSENTER/SYSEXIT broken on Pentium Pro and Pentium II?

I was just reading What is linux-gate.so.1?, and it says this: Intel recognized this problem early on and introduced a more efficient system call interface in the form of sysenter and sysexit ...
13
votes
5answers
1k views

Has there ever been a instruction set architecture that did not require instruction decoding at all?

I am studying basic principles of instruction set architectures and am considering what it would take to not have any instruction decoding at all. I.e., all the control lines of the computer would be ...
13
votes
1answer
1k views

How can a Z80 assembly program find out the address stored in the SP register?

I'm wondering how to write a program in Z80 assembler that discovers the value stored in the SP register. From what I've seen, the only instructions that touch the SP register are: LD SP, HL/IX/IY EX ...
13
votes
3answers
1k views

Memory models for assembly libraries for Turbo C

Turbo C follows the Intel Memory Model where in Tiny, Small and Compact models calling a function is near but in Medium, Large and Huge models calling a function uses far calls. If I want to develop ...
13
votes
2answers
1k views

Origin of “arithmetic” and “logical” for signed and unsigned shifts

The assembly language for many processors use the phrase "arithmetic shift" to represent the bitwise shift of a signed value, and "logical shift" for an unsigned value. The two ...
13
votes
2answers
1k views

How to use the “darker” CGA palette using x86 Assembly?

For those of you retro developers out there, I am having a hard time figuring out how exactly to select the "darker" color palette in 320x200 CGA mode. Here's what I have so far: setup_cga_graphics: ...
12
votes
3answers
1k views

What 8086 instructions accept REP?

I tried this code in my assembler, set to 16 bit mode: bits 16 rep mov ds, ax Surprisingly, no error was thrown. Is this even valid? Wasn't rep only supposed to work with string instructions? Is it ...
12
votes
2answers
1k views

Does the Commodore 64 have the PHX opcode?

Code written for the Commodore 64 sometimes uses the PHX opcode, which should push X onto the stack. There also are plx, phy, ply. These were apparently added on the CMOS versions of the 6502; very ...
12
votes
1answer
731 views

Difference between INT 0x20 and INT 0x21 (0x4C)?

Checking the MS-DOS interrupt list we see INT 0x20 "Terminate the program" (see https://en.wikipedia.org/wiki/DOS_API) but if we check the same page we see INT 0x21 with function 0x4C will &...
12
votes
2answers
608 views

Early 65C816 CPU's SEP and REP instruction are followed by a NOP?

Why did early versions of the 65C816 CPU need a suffixed NOP to every SEP and REP instruction? I saw comments in some source code pointing at this. Looking around in official WDC's documentation and ...
12
votes
1answer
487 views

Sprites not rendering correctly before $2000

I am currently testing out some stuff in assembly with C64Studio and Vice and I noticed something with odd sprites. My code starts at $1000 and my sprites at $2000 but when I try to lower the first ...
11
votes
3answers
925 views

How does 6502 machine code process $ (address) VS #$ (value)?

How does the 6502's machine code process $ vs #$, as in it's assembly language? Does every piece of machine code have an extra byte or something telling to use addresses or values or was it something ...